: Argumente müssen Prozess- oder Job-IDs sein

: Argumente müssen Prozess- oder Job-IDs sein

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.shBefehl aus, damit Ihr Skript funktioniert (es ist im tofrodosPaket 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\nan 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 killBefehls 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 killBefehl 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 \rZeichen 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.

verwandte Informationen