![: Argumente müssen Prozess- oder Job-IDs sein](https://rvso.com/image/726405/%3A%20Argumente%20m%C3%BCssen%20Prozess-%20oder%20Job-IDs%20sein.png)
Ich möchte ein einfaches Bash-Skript (im Folgenden als „killprocess.sh“ bezeichnet) ausführen, um einen bestimmten Prozess/Dienst zu beenden, der auf einem bestimmten Port (sagen wir 8080) auf einem Remotecomputer ausgeführt wird, auf dem beide das Betriebssystem Ubuntu 18.04.1 LTS haben.
Ich habe wie folgt eine Verbindung über SSH (OpenSSH) hergestellt, um das Skript auszuführen. Die Verbindung wurde ebenfalls erfolgreich hergestellt.
sshpass -p "password" ssh -n [email protected] -f "/bin/bash /home/killprocess.sh"
Der Inhalt von killprocess.sh ist unten angegeben.
processID=$(lsof -t -i:8080)
echo $processID
kill $processID
Obwohl die Prozess-ID auf der Konsole korrekt ausgedruckt wird, erscheint unten eine Fehlermeldung, die besagt, dass der Prozess nicht beendet werden kann.
: Argumente müssen Prozess- oder Job-IDs sein
Antwort1
Führen Sie den fromdos killprocess.sh
Befehl aus, damit Ihr Skript funktioniert (es ist im tofrodos
Paket enthalten).
Hier ist der Grund.
Die Fehlermeldung lässt darauf schließen, dass Sie Ihr Skript in einem Windows-Texteditor geschrieben haben, der die Zeilenenden anders behandelt ( \r\n
an das Zeilenende anfügt, anstatt nur \n
). Die Fehlermeldung ist verdächtig, da sie ungefähr so lauten sollte:
bash: kill: meh: arguments must be process or job IDs
Eine Zeile wie die von Ihnen erwähnte würde nur ausgegeben, wenn das Argument des kill
Befehls ein (Wagenrücklauf-)Zeichen enthielte \r
. Wenn also die Fehlermeldung gedruckt wird, springt der Cursor vor dem dritten Doppelpunkt zurück an den Anfang der Zeile und der Rest der Fehlermeldung überschreibt alles, was bisher gedruckt wurde. Dies erklärt auch, warum der kill
Befehl sich beschwerte: Er erhielt etwas wie 1234\r
, was keine Prozess-ID sein kann.
Dies liegt höchstwahrscheinlich daran, dass die erste Zeile Ihres Skripts eigentlich
processID=$(lsof -t -i:8080)\r
aber Sie können das \r
Zeichen natürlich nicht sehen, da es nicht druckbar ist. Sie können es in der Ausgabe der zweiten Zeile nicht sehen, da diese die Zeile ausgibt, der Cursor an den Anfang zurückspringt, aber dann bewirkt das Zeilenumbruchzeichen, dass der Cursor in die nächste Zeile geht.
Übrigens wird immer dann ein Unix-/Windows-Zeilenendeproblem vermutet, wenn eine Bash-Fehlermeldung mit einem Doppelpunkt beginnt.