我想用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
命令-只要离开了分号,它会工作。