在 Bash 中使用 su 运行多个命令

在 Bash 中使用 su 运行多个命令

我想su -c以 root 身份运行多个命令。我不想为此使用额外的脚本。

我尝试了以下方法:

su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & " -c "ls -lh"

但它只执行第ls一个而不是第一个。

我尝试了以下方法:

su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ; ls -lh;"

但它说分号有错误;

你知道怎么做吗?

答案1

该命令运行良好:

su root -c "date; ls -lh"

但在这个命令中:

su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ; ls -lh;"

因为你&之前有过;,所以你会遇到错误。尝试删除&并重新执行该命令。

或者您可以像这样运行命令:

su root -c "(tcpdump -i wlan0 -s 1500 -w CCCCCC &); ls -lh"

答案2

作为阿努巴瓦 说, 你的

su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ; ls -lh;"

命令失败,因为不允许您 &立即执行;.您只需直接在 shell 中输入命令即可看到这一点:

  • true & true  作品
  • true & ; true不起作用

如果您希望该tcpdump命令在后台运行,请删除;,如

su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ls -lh;"

;(最后你也不需要,但这并没有什么坏处)。

答案3

我认为该nohup命令也会让您得到您想要的... tcpdump 在后台运行(不需要&符号):

su root -c "nohup tcpdump -i wlan0 -s 1500 -w CCCCCC ; ls -lh"

答案4

用于&&分隔命令,如下所示:

$ su -c "ls && ls"

相关内容