Dépannage des erreurs « Commande introuvable » lors de l'exécution de commandes Unix via Java avec JSch
Problème :
Code Java utilisant JSch ne parvient pas à exécuter certaines commandes Unix avec une erreur « commande introuvable », bien qu'il soit capable d'exécuter avec succès d'autres commandes simples. Plus précisément, l'exécution d'un graphique Ab-initio via Java à l'aide de la commande "air sandbox run" donne l'erreur.
Cause possible :
Le canal "exec" de JSch le fait n'alloue pas de pseudo-terminal (PTY) par défaut, ce qui entraîne la création d'un ensemble différent de scripts de démarrage ou la prise de différentes branches dans les scripts en fonction de l'absence de la variable d'environnement TERM. Par conséquent, l'environnement peut différer d'une session SSH interactive, conduisant potentiellement à un problème de PATH.
Solutions :
-
Corrigez la commande : Utilisez un chemin complet vers l'exécutable "air" dans la chaîne de commande pour éviter de vous fier à la variable d'environnement PATH.
-
Corrigez les scripts de démarrage : Assurez-vous que les scripts de démarrage définissent le PATH la même chose pour les sessions interactives et non interactives.
-
Utilisez un shell de connexion : Exécutez la commande via un shell de connexion (avec le commutateur "--login") pour hériter du nom de l'utilisateur actuel. environnement.
-
Modifiez l'environnement : Modifiez la variable d'environnement PATH dans la chaîne de commande pour inclure le chemin d'accès à l'exécutable "air".
-
Forcer l'allocation PTY (non recommandé) : Activez l'allocation de pseudo-terminal pour le canal "exec" à l'aide de la méthode setPty(true). Cependant, cela peut entraîner des conséquences ou des effets secondaires inattendus.
Remarques supplémentaires :
- La désactivation de l'allocation du pseudo-terminal dans un client SSH peut reproduire l'erreur.
- D'autres problèmes similaires incluent des commandes se comportant différemment dans JSch que dans les terminaux SSH et des difficultés à exposer les variables d'environnement utilisateur au canal "exec".
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!