Executando vários comandos com su no Bash

8

Eu gostaria de usar su -c para ser executado como vários comandos raiz. 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 ; .

Você sabe como fazer isso?

    
por Abruzzo Forte e Gentile 04.04.2011 / 16:14

5 respostas

12

Este comando é executado corretamente:

su root -c "date; ls -lh"

Mas neste comando:

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

Como você tem & antes de ; , você está recebendo erros. Tente remover & e reexecutar o comando.

Ou você pode executar seu comando assim:

su root -c "(tcpdump -i wlan0 -s 1500 -w CCCCCC &); ls -lh"
    
por 04.04.2011 / 16:20
2

Como anubhava diz , o seu

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

está falhando porque você não tem permissão para & seguido imediatamente por ; . Você pode ver isso apenas digitando os comandos diretamente no shell:

  • true & true funciona
  • true & ; true não funciona

Se você deseja que o comando tcpdump seja executado em segundo plano, remova o ; , como em

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

(e você também não precisa do ; no final, mas não dói).

    
por 15.02.2017 / 20:57
1

Eu acho que o comando nohup vai te dar o que você quer também ... tcpdump rodando em segundo plano (nenhum e comercial necessário):

su root -c "nohup tcpdump -i wlan0 -s 1500 -w CCCCCC ; ls -lh"
    
por 04.04.2011 / 16:38
0

Só para adicionar à a excelente resposta de Anubhava :

Você também pode usar {} , assim:

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

{} é um pouco mais eficiente que () , pois não cria um sub shell. {} precisa de um espaço depois de { e um ; antes de } , a menos que já tenhamos um & .

    
por 15.02.2017 / 20:34
-1

Use && para separar seus comandos da seguinte forma:

$ su -c "ls && ls"
    
por 04.04.2011 / 16:20

Tags