Eu gostaria de usar su -c
para executar como root vários comandos por completo. Eu não quero usar um script extra para isso.
Eu tentei o seguinte:
su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & " -c "ls -lh"
mas executa apenas o ls
não o primeiro.
Eu tentei o seguinte:
su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ; ls -lh;"
mas diz que há um erro com o ponto e vírgula ;
.
voce sabe como fazer isso?
;
entre otcpdump
els
comandos - apenas deixar de fora os pontos e vírgulas e ele vai trabalhar.Como anubhava diz , seu
O comando está falhando porque você não tem permissão para
&
segui-lo imediatamente;
. Você pode ver isso digitando os comandos diretamente no shell:true & true
trabalhotrue & ; true
não funcionaSe você deseja que o
tcpdump
comando seja executado em segundo plano, remova o;
, como em(e você também não precisa do
;
final, mas não dói).fonte
Eu acho que o
nohup
comando também lhe dará o que você deseja ... tcpdump em execução em segundo plano (não é necessário comercial):fonte
nohup
quando você executa comandos em segundo plano, mas isso realmente não tem nada a ver com esta pergunta. (2) Esta resposta está errada -nohup
por si só não faz com que um comando seja executado em segundo plano; você ainda precisa digitar&
(o que nos deixa de volta onde começamos, com um erro de sintaxe no comando).Apenas para acrescentar à excelente resposta de Anubhava :
Você poderia usar
{}
também, assim:{}
é um pouco mais eficiente do()
que não cria um sub shell.{}
precisa de um espaço depois{
e um;
antes, a}
menos que&
já tenhamos um .fonte
;
entre otcpdump
els
comandos - apenas deixar de fora o ponto e vírgula e ele vai trabalhar.Use
&&
para separar seus comandos da seguinte maneira:fonte
tcpdump
processo em segundo plano,&&
não adianta nada.