Der Befehl funktioniert manuell in Bash, aber nicht im Skript

Der Befehl funktioniert manuell in Bash, aber nicht im Skript

Wir verwenden Powershell Version 5.1.18362.1171 unter Windows 10.

Wenn wir den folgenden Befehl ausführen:

ssh -i id_rsa [email protected] 'exec bash -l';

Und führen Sie dann diesen Befehl manuell in der geöffneten Bash-Konsole aus:

/usr/bin/o3d3xx-reboot

Das Skript funktioniert ordnungsgemäß ohne Fehler und führt am Ende einen Neustart durch. Wenn wir jedoch versuchen, diesen Code mit dem folgenden Code automatisch auszuführen, schlägt dies immer fehl und es tritt ein Fehler im Neustartskript auf:

ssh -i id_rsa [email protected] '/usr/bin/o3d3xx-reboot';

Gibt es eine Möglichkeit, dieses Skript/Binärprogramm ohne manuelle Eingabe auszuführen, so wie es in der ersten Version funktioniert?

Antwort1

Sofern Sie uns nicht die Protokolldatei mit der Beschreibung geben, warum der Neustart nicht erfolgt ist, ist es schwierig, das Problem zu erraten.

Sie können das Problem wahrscheinlich umgehen, indem Sie in Ihrem SSH die Bash aufrufen, den Befehl ausführen und die SSH-Verbindung sofort beenden, und zwar wie folgt:

ssh you@yourserver "bash --rcfile <(echo '. ~/.bashrc; /usr/bin/o3d3xx-reboot; exit') -l"

Die Tatsache, dass Sie bashmit aufrufen, -lscheint darauf hinzudeuten, dass Ihre o3d3xx-rebootausführbare Datei etwas von benötigt /etc/profile. Vielleicht möchten Sie dort nachsehen, um eine weniger hackige Lösung zu finden.

Antwort2

ssh -i id_rsa myuser@myip "bash --login -c 'cd /usr/bin/ && o3d3xx-reboot && exit'";

Offenbar fehlten Umgebungsvariablen, sodass das Skript nicht funktionierte. Ich habe das obige Skript verwendet, das die Umgebung auf dieselbe Weise lädt, als ob ich angemeldet wäre und die Befehle manuell eingegeben hätte.

verwandte Informationen