Me gustaría usar su -cpara 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 lsno 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 eltcpdumpylscomandos - 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 & truetrabajostrue & ; trueno funcionaSi desea que el
tcpdumpcomando se ejecute en segundo plano, elimine el;, como en(y tampoco necesitas el
;al final, pero no duele).fuente
Creo que el
nohupcomando también te dará lo que quieres ... tcpdump ejecutándose en segundo plano (no es necesario utilizar ampersand):fuente
nohupcuando ejecuta comandos en segundo plano, pero eso realmente no tiene nada que ver con esta pregunta. (2) Esta respuesta es incorrecta:nohuppor 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 comandostcpdumpyls, simplemente omita el punto y coma y funcionará.Use
&¶ separar sus comandos así:fuente
tcpdumpproceso en segundo plano,&&no sirve de nada.