Échec de l'exécution des commandes Unix avec une erreur « Introuvable » via JSch
Lors de la tentative d'exécution de certaines commandes Unix via la bibliothèque JSch en Java, les utilisateurs peuvent rencontrer des erreurs indiquant que la commande est introuvable.
Comprendre le Problème
Contrairement à un client SSH interactif, le canal "exec" de JSch n'attribue pas de pseudo terminal (PTY) par défaut. Cette différence d'environnement peut conduire à des exécutions de scripts de démarrage et à des configurations de PATH variables par rapport aux sessions interactives. Par conséquent, les commandes qui reposent sur des variables d'environnement spécifiques peuvent échouer.
Identification de la cause première
Pour confirmer la cause première, désactivez l'allocation PTY dans votre client SSH et essayez de exécutez la commande manuellement. Si vous rencontrez la même erreur « introuvable », cela suggère que la variable d'environnement PATH diffère entre les sessions interactives et non interactives.
Solutions
Pour résoudre ce problème , envisagez les solutions suivantes par ordre de préférence :
1. Modifiez la commande pour définir explicitement le chemin d'accès à l'exécutable
String command = "/bin/air sandbox run <graph-path>";
2. Ajustez les scripts de démarrage pour définir le PATH de manière cohérente
Assurez-vous que le PATH est défini de manière identique pour les sessions interactives et non interactives dans les scripts de démarrage sur le serveur distant.
3. Utilisez le shell de connexion pour exécuter la commande
Préparez la commande de "bash --login -c" pour l'exécuter explicitement via le shell de connexion, qui définit généralement un environnement cohérent :
String command = "bash --login -c \"air sandbox run <graph-path>\"";
4. Définissez les variables d'environnement directement dans la commande
Pour les commandes qui dépendent fortement d'une configuration d'environnement spécifique, envisagez de définir les variables directement dans la commande :
String command = "PATH=\"$PATH;/path/to/air\" && air sandbox run <graph-path>";
5. Allocation PTY forcée (non recommandée)
En dernier recours, vous pouvez forcer l'allocation PTY pour le canal "exec" en utilisant .setPty(true). Cependant, cette approche peut introduire des effets secondaires indésirables.
Pour obtenir des informations supplémentaires et des problèmes similaires, reportez-vous aux ressources suivantes :
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!