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

相关推荐
tedcloud12317 分钟前
UI-TARS-desktop部署教程:构建AI桌面自动化系统
服务器·前端·人工智能·ui·自动化·github
AC赳赳老秦3 小时前
供应链专员提效:OpenClaw自动跟踪物流信息、更新库存数据,异常自动提醒
java·大数据·服务器·数据库·人工智能·自动化·openclaw
夏日听雨眠4 小时前
LInux(逻辑地址与物理地址的区别,文件描述符,lseek函数)
linux·运维·网络
哲霖软件5 小时前
ERP 赋能非标自动化行业:破解物料与库存管理难题
运维·自动化
qq_542515416 小时前
Ubuntu 22.04.4 LTS安装ToDesk最新版打不开,无响应?旧版本4.7.2_277版本分享
linux·ubuntu·todesk
火车叼位6 小时前
替代 Tiny Win10 的 Linux 方案:Debian XFCE 精简桌面搭建
linux·运维
小麦嵌入式6 小时前
FPGA入门(四):时序逻辑计数器原理与 LED 闪烁实现
linux·驱动开发·stm32·嵌入式硬件·fpga开发·硬件工程·dsp开发
皮卡蛋炒饭.7 小时前
传输层协议UDP
linux·网络协议·udp
大明者省7 小时前
宝塔开了端口,Ubuntu 还得开相应端口才能打通
服务器·数据库·ubuntu
syagain_zsx7 小时前
Linux指令初识(实用篇)
linux·运维·服务器