2016-11-22 7 views
0

Beim Versuch, den folgenden Befehl über ssh auszuführen:Fehler beim Ausführen von bash Befehl über ssh

ssh hostname 'for pid in $(ps -ef | grep "some process" | awk '{print $2}'); do kill -9 $pid; done'

bekomme ich folgende Fehlermeldung:

awk: cmd. line:1: {print 
awk: cmd. line:1:  ^unexpected newline or end of string 

Ich habe versucht, auf verschiedene Weise zu entkommen aber habe nicht den richtigen Weg gefunden - oder vielleicht ist es etwas anderes?

Vielen Dank im Voraus!

+1

können Sie 'pkill -f" etwas Prozess "' in diesem Fall verwenden. – ymonad

+0

Das wird nicht alle Prozesse mit einem bestimmten Namen töten, oder? –

Antwort

3

Sie können keine einfachen Anführungszeichen in eine Zeichenfolge mit nur einem Anführungszeichen einschließen, da nichts innerhalb des Ausdrucks interpretiert wird, mit Ausnahme des einfachen Anführungszeichens, das die Zeichenfolge schließt.

ssh host 'for pid in $(ps -ef | grep "some process" | awk '"'"'{print $2}'"'"'); do kill -9 $pid; done' 

Alternativ verketten entkam Apostrophe (\'):

ssh host 'for pid in $(ps -ef | grep "some process" | awk '\''{print $2}'\''); do kill -9 $pid; done' 

Siehe Strong Quoting Sie können die einzelnen Strings in Anführungszeichen mit "'" verketten.

Die Ursache des Fehlers

Ihr Befehl als ein paar $IFS -separated Argumente interpretiert wird:

  • for pid in $(ps -ef | grep "some process" | awk {print
  • }); do kill -9 $pid; done

Es gibt keine $2 in die Saiten, seit $2 wird als Shell-Variable interpretiert, und der Wert dieser Variablen im normalen Shell-Kontext ist leer.

So haben Sie den folgenden Befehl an den Server gesendet:

for pid in $(ps -ef | grep "some process" | awk {print }); do kill -9 $pid; done 

Wenn Sie diesen Befehl in einem Terminal ausführen, werden Sie den gleichen Fehler von AWK erhalten.

+0

Wie @ymonad in einem vorhergehenden Kommentar oben gezeigt hat, würde der ** pkill ** -Befehl das Zitatproblem reduzieren: 'ssh host 'pkill -KILL -f" irgendein Prozess "' ... so lange wie der Text **' irgendein Prozess "** enthält natürlich keine Anführungszeichen. – Jdamian

Verwandte Themen