sh -c
在Shell中执行一个字符串作为命令,可以在一条命令中执行多个指令。
目录
语法如下:
sh -c 'command'
其中,command
是要执行的命令或命令串。
案例
bash
[root@localhost shyn]# sh -c 'echo 111; echo 222'
111
222
使用sh -c
与直接终端敲命令的区别
**1、sh -c
属于非交互模式
- 在终端上敲入命令就可以显示对应结果,这样与终端进行交互执行命令的方式就称为交互模式。
- 非交互模式就是调用 bash 解释器,通过 bash -c 后接命令的形式来解释执行命令
2、sh -c
多个命令可以在一行中执行
3、sh -c
方便编程调用
- 使用
sh -c
命令的一个常见场景是通过其他程序或脚本调用Shell命令。 - 例如,在一个Python脚本中使用
subprocess
模块调用Shell命令时,可以使用sh -c
来执行包含多个命令的脚本。
使用sh -c
解决命令权限问题
下面例子中sudo
执行echo
追加命令报错权限不足,原因是重定向符号 ">"
和">>"
也是 bash 的命令。我们使用 sudo 只是让 echo 命令具有了 root 权限,但是没有让 ">"
和 ">>"
命令也具有 root 权限,所以 bash 会认为这两个命令都没有像 test.csv
文件写入信息的权限。
bash
[shyn@localhost ~]$ sudo echo "hhh" >>test
bash: test: 权限不够
[shyn@localhost shyn]# ll
总用量 8
-rw-r--r--. 1 root root 12 3月 8 05:41 test
[shyn@localhost ~]$ sudo sh -c 'echo "hhh" >>test'
[sudo] shyn 的密码:
[shyn@localhost ~]$
解决方法:利用 "sh -c"
命令,它可以让 bash 将一个字串作为完整的命令来执行,这样就可以将 sudo 的影响范围扩展到整条命令。