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.
können Sie 'pkill -f" etwas Prozess "' in diesem Fall verwenden. – ymonad
Das wird nicht alle Prozesse mit einem bestimmten Namen töten, oder? –