Les commandes utilisateur JSch échouent avec "... introuvable" lorsqu'elles sont exécutées via Java
Problème :
Les tentatives d'exécution de commandes Unix spécifiques via Java à l'aide de la bibliothèque JSch entraînent une erreur "... introuvable", malgré le bon fonctionnement des commandes lorsqu'elles sont exécutées directement via un client SSH.
Raisons possibles :
-
Allocation de pseudo-terminal : Le canal "exec" dans JSch n'alloue pas de pseudo-terminal (PTY) par défaut, conduisant à un autre configuration de l'environnement et scripts shell potentiellement manquants.
-
Modification PATH : La variable d'environnement PATH peut être définie différemment pour les sessions interactives et non interactives, entraînant l'indisponibilité des exécutables.
Solutions :
Recommandé :
-
Commande Chemin complet : Utilisez le chemin complet pour l'exécutable dans la commande, par exemple /bin/air sandbox run .
-
Ajustement du script de démarrage : Modifiez les scripts de démarrage pour garantir des paramètres PATH cohérents pour les utilisateurs interactifs et non -sessions interactives.
Approches alternatives :
-
Invocation du shell de connexion : Exécutez la commande explicitement via le shell de connexion en utilisant le commutateur --login.
-
Modification de l'environnement : Définissez les variables d'environnement nécessaires dans la commande elle-même, par exemple, PATH="$PATH;/path/to/air" && air sandbox run .
-
Activation PTY (non recommandée) : Bien que cela soit possible, forcer l'allocation PTY pour le canal "exec" peut introduire des effets secondaires effets.
Problèmes connexes :
- [Certaines commandes Unix échouent avec "... not found", même avec setPty activé](https ://stackoverflow.com/questions/34846613/certain-unix-commands-fail-with-not-found-when-executed-through-java-using-jsch-ev)
- [Commande exécutée avec SSH .NET SshClient.RunCommand échoue avec « Aucun fichier ou répertoire de ce type »]https://stackoverflow.com/questions/19774736/command-4gl-executed-with-ssh-net-sshclient-runcommand-fails-with-no-such -file-o)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!