Ich möchte verwenden su -c
, um als Root mehrere Befehle insgesamt auszuführen. Ich möchte dafür kein zusätzliches Skript verwenden.
Ich habe folgendes versucht:
su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & " -c "ls -lh"
aber es führt nur das ls
nicht das erste aus.
Ich habe folgendes versucht:
su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ; ls -lh;"
aber es heißt, dass es einen Fehler mit dem Semikolon gibt ;
.
Weißt du wie das geht?
;
zwischen den Befehlentcpdump
undls
eingeben - lassen Sie einfach die Semikolons weg und es wird funktionieren.Wie Anubhava sagt , dein
Befehl schlägt fehl, weil Sie nicht
&
sofort gefolgt sein dürfen;
. Sie können dies sehen, indem Sie die Befehle direkt in die Shell eingeben:true & true
funktionierttrue & ; true
funktioniert nichtWenn der
tcpdump
Befehl im Hintergrund ausgeführt werden soll, entfernen Sie den Befehl;
wie in(und das brauchst du
;
am Ende auch nicht, aber es tut nicht weh).quelle
Ich denke, der
nohup
Befehl bringt Ihnen auch das, was Sie wollen ... tcpdump läuft im Hintergrund (kein kaufmännisches Und erforderlich):quelle
nohup
wenn Sie Befehle im Hintergrund ausführen, aber das hat wirklich nichts mit dieser Frage zu tun. (2) Diese Antwort ist falsch -nohup
allein führt nicht dazu, dass ein Befehl im Hintergrund ausgeführt wird. Sie müssen noch eingeben&
(was uns zurücklässt, wo wir begonnen haben, mit einem Syntaxfehler im Befehl).Nur um Anubhavas ausgezeichnete Antwort zu ergänzen :
Sie könnten auch so verwenden
{}
:{}
ist etwas effizienter als dadurch,()
dass keine Sub-Shell erstellt wird.{}
braucht ein Leerzeichen nach{
und ein;
vor, es}
sei denn, wir haben&
bereits ein.quelle
;
zwischen den Befehlentcpdump
undls
eingeben - lassen Sie einfach das Semikolon weg und es wird funktionieren.Verwenden
&&
Sie diese Option, um Ihre Befehle wie folgt zu trennen:quelle
tcpdump
Prozess im Hintergrund ausführen möchten ,&&
nützt Ihnen das überhaupt nichts.