我想用su -c根命令同时运行多个命令。我不想为此使用额外的脚本。
我尝试了以下方法:
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;"
但它说分号有误;。
你知道怎么做吗?
我想用su -c根命令同时运行多个命令。我不想为此使用额外的脚本。
我尝试了以下方法:
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;"
但它说分号有误;。
你知道怎么做吗?
Answers:
正如anubhava所说,
su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ; ls -lh;"
命令失败,因为不允许您&紧跟在
 之后;。您可以通过直接在外壳中键入命令来查看此信息:
true & true  作品true & ; true 不起作用如果您希望tcpdump命令在后台运行,请删除;,如
su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ls -lh;"
(并且您也不需要;结尾处的,但这也不会造成伤害)。
我认为该nohup命令也将为您提供所需的信息... tcpdump在后台运行(无需使用“&”号):
su root -c "nohup tcpdump -i wlan0 -s 1500 -w CCCCCC ; ls -lh"
              nohup在后台运行命令时最好使用,但这确实与这个问题无关。(2)这个答案是错误的- nohup本身不会导致命令在后台运行;您仍然必须键入&(这使我们回到了开始的位置,但命令中出现语法错误)。
                    只是为了补充Anubhava的出色答案:
您也可以这样使用{}:
su root -c "{ tcpdump -i wlan0 -s 1500 -w CCCCCC & }; ls -lh"
{}()它比不创建子外壳要有效得多。{}确实需要经过空间{和;之前}除非我们有一个&已经。
;之间tcpdump和ls命令-只要离开了分号,它会工作。
                    使用&&来分隔命令,如下所示:
$ su -c "ls && ls"
              tcpdump在后台运行该进程,&&那么您也没有任何好处。
                    
;之间tcpdump和ls命令-只要离开了分号,它会工作。