Maison > Java > javaDidacticiel > Pourquoi certaines commandes Unix échouent-elles avec « Commande introuvable » lorsqu'elles sont exécutées via Java à l'aide de JSch ?

Pourquoi certaines commandes Unix échouent-elles avec « Commande introuvable » lorsqu'elles sont exécutées via Java à l'aide de JSch ?

Mary-Kate Olsen
Libérer: 2024-11-28 02:42:11
original
202 Les gens l'ont consulté

Why Do Certain Unix Commands Fail with

Certaines commandes Unix échouent avec l'erreur « Commande introuvable » lorsqu'elles sont exécutées via Java à l'aide de JSch

Ce problème survient lors de l'exécution de commandes Unix via Java en utilisant la bibliothèque JSch. Lorsqu'une commande telle que "air not found" échoue, même si elle fonctionne dans un client SSH, une enquête plus approfondie est justifiée.

Cause fondamentale :

Contrairement à une session SSH interactive, le canal "exec" dans JSch n'attribue pas de pseudo-terminal. Cela peut entraîner l'exécution d'un ensemble différent de scripts de démarrage, conduisant à un environnement différent. Dans ce cas, la variable d'environnement PATH peut être définie différemment, entraînant l'indisponibilité de l'exécutable "air".

Solutions :

Il existe plusieurs méthodes pour résoudre ce problème. problème, par ordre de préférence :

  1. Exécution du chemin complet :
    Utiliser le chemin complet vers l'exécutable dans la commande, éliminant ainsi la dépendance à l'égard de l'environnement.
  2. Modification du script de démarrage :
    Ajustez les scripts de démarrage pour définir le PATH de manière cohérente pour les versions interactives et non interactives. sessions.
  3. Exécution du shell de connexion :
    Exécuter la commande explicitement via une connexion shell, en utilisant le commutateur --login.
  4. Modification de l'environnement :
    Modifiez l'environnement dans la commande elle-même pour définir le PATH nécessaire et/ou d'autres variables.
  5. Allocation forcée du pseudo-terminal :
    (Non recommandé) Forcer l'allocation du pseudo-terminal pour l'"exécutif" canal utilisant setPty(true), mais soyez conscient des effets secondaires potentiels.

Problèmes connexes :

D'autres problèmes similaires ont été rencontrés et discutés dans ce qui suit ressources :

  • Certaines commandes Unix échouent avec "... not found", lorsqu'elles sont exécutées via Java en utilisant JSch, même avec setPty activé
  • Les commandes exécutées à l'aide de JSch se comportent différemment que dans le terminal SSH (contourne le message d'invite de confirmation de "oui/"non")
  • JSch : existe-t-il un moyen d'exposer les variables d'environnement utilisateur à "exec " ?
  • La commande (.4gl) exécutée avec SSH.NET SshClient.RunCommand échoue avec "Aucun fichier de ce type ou répertoire"

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal