Heim >Java >javaLernprogramm >Warum schlagen JSch-Benutzerbefehle mit „Nicht gefunden' fehl, wenn sie über Java ausgeführt werden?

Warum schlagen JSch-Benutzerbefehle mit „Nicht gefunden' fehl, wenn sie über Java ausgeführt werden?

Susan Sarandon
Susan SarandonOriginal
2024-11-13 14:21:02834Durchsuche

Why do JSch User Commands Fail with

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:

  1. Befehl „Vollständiger Pfad“: Verwenden Sie den vollständigen Pfad zu die ausführbare Datei im Befehl, z. B. /bin/air sandbox run .
  2. 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:

  1. Login-Shell-Aufruf: Führen Sie den Befehl explizit über die Login-Shell mit aus den Schalter --login.
  2. 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn