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

本文介绍了sh-c命令在Shell中的使用,包括其非交互模式特性、一次执行多个命令的便捷性以及在编程调用中的应用。还讨论了如何使用sh-c解决sudo执行命令时的权限问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

语法如下:

sh -c 'command'

其中,command是要执行的命令或命令串。

案例

[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文件写入信息的权限。

[shyn@localhost ~]$ sudo echo "hhh" >>test
bash: test: 权限不够
[shyn@localhost shyn]# ll
总用量 8
-rw-r--r--. 1 root root 12 38 05:41 test
[shyn@localhost ~]$ sudo sh -c 'echo "hhh" >>test'
[sudo] shyn 的密码:
[shyn@localhost ~]$

解决方法:利用 "sh -c" 命令,它可以让 bash 将一个字串作为完整的命令来执行,这样就可以将 sudo 的影响范围扩展到整条命令。

### 使用 `sh -c` 执行 `echo blkid` 命令 可以通过以下方式使用 `sh -c`执行 `echo blkid`: ```bash sh -c "echo blkid" ``` 这条命令的作用是通过 `sh` 解释器运行字符串中的命令,这里只是简单地打印出 `blkid` 字符串[^1]。 --- ### `blkid` 命令的作用与输出示例 #### 作用 `blkid` 是一个用于识别块设备及其属性的工具。它可以读取并显示块设备上的文件系统类型、UUID 和其他元数据信息。这对于管理磁盘分区和挂载操作非常有用[^2]。 #### 输出示例 以下是 `blkid` 的典型输出示例: ```plaintext /dev/sda1: UUID="123e4567-e89b-12d3-a456-426614174000" TYPE="ext4" /dev/sdb1: LABEL="DATA" UUID="abcd1234-abcd-1234-abcd-123456789abc" TYPE="ntfs" ``` 每行代表一个块设备的信息,通常包括以下几个字段: - **设备名称**:如 `/dev/sda1`。 - **UUID**:唯一标识符。 - **LABEL**(可选):卷标名。 - **TYPE**:文件系统类型,例如 `ext4`, `ntfs`, `vfat` 等[^3]。 #### 调用示例 可以直接调用 `blkid` 查看所有已知块设备的详细信息: ```bash blkid ``` 如果只想查询特定设备,则可以指定设备路径: ```bash blkid /dev/sda1 ``` --- ### 结合 `-exec` 参数使用场景 当需要结合 `find` 命令查找某些条件下的块设备并对其执行 `blkid` 操作时,可以用到 `-exec` 参数。例如: ```bash find /dev -type b -exec blkid {} \; ``` 这里的 `{}` 表示找到的目标文件或目录位置,`\;` 则表示 `-exec` 子句的结束标记[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值