JSch-Benutzerbefehle schlagen bei Ausführung über Java mit „... nicht gefunden“ fehl
Problem:
Versuche, bestimmte Unix-Befehle über Java mithilfe der JSch-Bibliothek auszuführen, führen zu einem „... nicht gefunden“-Fehler, obwohl die Befehle ordnungsgemäß funktionieren, wenn sie direkt über einen SSH-Client ausgeführt werden.
Mögliche Gründe:
-
Pseudo-Terminal-Zuweisung: Der „exec“-Kanal in JSch weist standardmäßig kein Pseudo-Terminal (PTY) zu, was zu einer anderen führt Umgebungseinrichtung und möglicherweise fehlende Shell-Skripte.
-
PATH-Änderung: Die Umgebungsvariable PATH kann für interaktive und nicht interaktive Sitzungen unterschiedlich eingestellt sein, was dazu führt, dass ausführbare Dateien nicht mehr verfügbar sind.
Lösungen:
Empfohlen:
-
Befehl „Vollständiger Pfad“: Verwenden Sie den vollständigen Pfad zu die ausführbare Datei im Befehl, z. B. /bin/air sandbox run .
-
Anpassung des Startskripts: Ändern Sie Startskripte, um konsistente PATH-Einstellungen sowohl für interaktive als auch für nicht-interaktive Anwendungen sicherzustellen -interaktive Sitzungen.
Alternative Ansätze:
-
Login-Shell-Aufruf: Führen Sie den Befehl explizit über die Login-Shell mit aus den Schalter --login.
-
Umgebungsänderung: Legen Sie die erforderlichen Umgebungsvariablen im Befehl selbst fest, z. B. PATH="$PATH;/path/to/air" && Air Sandbox Run .
-
PTY-Aktivierung (nicht empfohlen): Das Erzwingen der PTY-Zuweisung für den „exec“-Kanal ist zwar möglich, kann jedoch zu Seitenfehlern führen Auswirkungen.
Verwandte Probleme:
- [Bestimmte Unix-Befehle schlagen mit „... nicht gefunden“ fehl, auch wenn setPty aktiviert ist](https ://stackoverflow.com/questions/34846613/certain-unix-commands-fail-with-not-found-when-executed-through-java-using-jsch-ev)
- [Befehl mit SSH ausgeführt .NET SshClient.RunCommand schlägt mit „Keine solche Datei oder kein solches Verzeichnis“ fehl]https://stackoverflow.com/questions/19774736/command-4gl-executed-with-ssh-net-sshclient-runcommand-fails-with-no-such -file-o)
Das obige ist der detaillierte Inhalt vonWarum schlagen JSch-Benutzerbefehle mit „Nicht gefunden' fehl, wenn sie über Java ausgeführt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!