Me gustaría usar su -c
para ejecutar como root múltiples comandos por completo. No quiero usar un script adicional para esto.
Intenté lo siguiente:
su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & " -c "ls -lh"
pero ejecuta solo el ls
no el primero.
Intenté lo siguiente:
su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ; ls -lh;"
pero dice que hay un error con el punto ;
y coma .
¿Sabes como hacer esto?
;
entre eltcpdump
yls
comandos - acaba de dejar de lado los puntos y comas y funcionará.Como dice anubhava , tu
el comando falla porque no se le permite haber
&
seguido de inmediato;
. Puede ver esto simplemente escribiendo los comandos directamente en el shell:true & true
trabajostrue & ; true
no funcionaSi desea que el
tcpdump
comando se ejecute en segundo plano, elimine el;
, como en(y tampoco necesitas el
;
al final, pero no duele).fuente
Creo que el
nohup
comando también te dará lo que quieres ... tcpdump ejecutándose en segundo plano (no es necesario utilizar ampersand):fuente
nohup
cuando ejecuta comandos en segundo plano, pero eso realmente no tiene nada que ver con esta pregunta. (2) Esta respuesta es incorrecta:nohup
por sí sola no hace que un comando se ejecute en segundo plano; todavía tiene que escribir&
(lo que nos deja atrás donde comenzamos, con un error de sintaxis en el comando).Solo para agregar a la excelente respuesta de Anubhava :
También podría usarlo
{}
así:{}
es un poco más eficiente()
que porque no crea un sub shell.{}
necesita un espacio después{
y un;
antes a}
menos que&
ya tengamos un espacio .fuente
;
entre los comandostcpdump
yls
, simplemente omita el punto y coma y funcionará.Use
&&
para separar sus comandos así:fuente
tcpdump
proceso en segundo plano,&&
no sirve de nada.