Je voudrais utiliser su -c
pour exécuter en tant que root plusieurs commandes. Je ne veux pas utiliser de script supplémentaire pour cela.
J'ai essayé ce qui suit:
su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & " -c "ls -lh"
mais il exécute seulement le ls
pas le premier.
J'ai essayé ce qui suit:
su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ; ls -lh;"
mais il indique qu'il y a une erreur avec le point-virgule ;
.
Savez-vous comment le faire?
;
entre les commandestcpdump
etls
- laissez simplement les points-virgules et cela fonctionnera.Comme le dit anubhava , votre
échoue car vous n'êtes pas autorisé à avoir
&
suivi immédiatement;
. Vous pouvez le voir simplement en tapant les commandes directement dans le shell:true & true
travauxtrue & ; true
ne fonctionne pasSi vous souhaitez que la
tcpdump
commande s'exécute en arrière-plan, supprimez le;
, comme dans(et vous n'avez pas besoin du
;
à la fin non plus, mais ça ne fait pas mal).la source
Je pense que la
nohup
commande vous donnera ce que vous voulez aussi ... tcpdump fonctionnant en arrière-plan (pas de perluète nécessaire):la source
nohup
lorsque vous exécutez des commandes en arrière-plan, mais cela n'a vraiment rien à voir avec cette question. (2) Cette réponse est erronée -nohup
en elle-même ne provoque pas l'exécution d'une commande en arrière-plan; vous devez encore taper&
(ce qui nous laisse là où nous avons commencé, avec une erreur de syntaxe dans la commande).Pour ajouter à l'excellente réponse d'Anubhava :
Vous pouvez également utiliser
{}
, comme ceci:{}
est un peu plus efficace que()
dans la mesure où il ne crée pas de sous-shell.{}
a besoin d'un espace après{
et;
avant,}
sauf si nous en avons&
déjà un .la source
;
entre les commandestcpdump
etls
- laissez simplement le point-virgule et cela fonctionnera.Utilisez
&&
pour séparer vos commandes comme ceci:la source
tcpdump
processus en arrière-plan, cela&&
ne vous sert à rien.