`sh -c`命令——解决命令权限问题、一条命令中执行多个指令

sh -c在Shell中执行一个字符串作为命令,可以在一条命令中执行多个指令。

目录

  • 语法如下:
  • [使用`sh -c`与直接终端敲命令的区别](#使用sh -c与直接终端敲命令的区别)
  • [使用`sh -c`解决命令权限问题](#使用sh -c解决命令权限问题)

语法如下:

复制代码
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 的影响范围扩展到整条命令。

相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式