Heim >Java >javaLernprogramm >Warum schlagen bestimmte Unix-Befehle mit „Befehl nicht gefunden' fehl, wenn sie über Java mit JSch ausgeführt werden?

Warum schlagen bestimmte Unix-Befehle mit „Befehl nicht gefunden' fehl, wenn sie über Java mit JSch ausgeführt werden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-28 02:42:11176Durchsuche

Why Do Certain Unix Commands Fail with

Bestimmte Unix-Befehle schlagen mit dem Fehler „Befehl nicht gefunden“ fehl, wenn sie über Java mit JSch ausgeführt werden

Dieses Problem tritt auf, wenn Unix-Befehle über Java ausgeführt werden unter Verwendung der JSch-Bibliothek. Wenn ein Befehl wie „Air nicht gefunden“ fehlschlägt, obwohl er in einem SSH-Client funktioniert, ist eine weitere Untersuchung erforderlich.

Ursache:

Im Gegensatz zu einer interaktiven SSH-Sitzung Der „exec“-Kanal in JSch weist kein Pseudo-Terminal zu. Dies kann dazu führen, dass ein anderer Satz von Startskripten ausgeführt wird, was zu einer anderen Umgebung führt. In diesem Fall ist die Umgebungsvariable PATH möglicherweise anders eingestellt, was dazu führt, dass die ausführbare Datei „air“ nicht verfügbar ist.

Lösungen:

Es gibt mehrere Methoden, um dieses Problem zu beheben Ausgabe, in der Reihenfolge ihrer Präferenz:

  1. Vollständiger Pfad Ausführung:
    Verwenden Sie den vollständigen Pfad zur ausführbaren Datei im Befehl, um die Abhängigkeit von der Umgebung zu vermeiden.
  2. Änderung des Startskripts:
    Passen Sie die Startskripte an, um die festzulegen PATH konsistent für interaktive und nicht interaktive Sitzungen.
  3. Login-Shell Ausführung:
    Führen Sie den Befehl explizit über eine Login-Shell aus, indem Sie den Schalter --login verwenden.
  4. Umgebungsänderung:
    Ändern Sie die Umgebung im Befehl selbst in Legen Sie den erforderlichen PATH und/oder andere Variablen fest.
  5. Erzwungenes Pseudo-Terminal Zuweisung:
    (Nicht empfohlen) Pseudoterminale Zuweisung für den „exec“-Kanal mit setPty(true) erzwingen, aber beachten Sie mögliche Nebenwirkungen.

Verwandt Probleme:

Weitere ähnliche Probleme sind aufgetreten und werden im Folgenden besprochen Ressourcen:

  • Bestimmte Unix-Befehle schlagen mit „... nicht gefunden“ fehl, wenn sie über Java mit JSch ausgeführt werden, auch wenn setPty aktiviert ist
  • Befehle, die mit JSch ausgeführt werden, verhalten sich anders als im SSH-Terminal (umgeht die Bestätigungsaufforderungsmeldung „Ja/Nein“)
  • JSch: Gibt es eine Möglichkeit, Benutzerumgebungsvariablen für „exec“ verfügbar zu machen? Kanal?
  • Befehl (.4gl), der mit SSH.NET SshClient.RunCommand ausgeführt wird, schlägt mit „Keine solche Datei oder Verzeichnis“ fehl

Das obige ist der detaillierte Inhalt vonWarum schlagen bestimmte Unix-Befehle mit „Befehl nicht gefunden' fehl, wenn sie über Java mit JSch 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