1 votes

Comportement différent du script en local et via ssh

J'ai un script sur un serveur-A

Script-A

#!/bin/bash -l
echo "script-A.sh" | change-environment.sh

Quand je me connecte en ssh sur le serveur-A et l'exécute, tout fonctionne bien. Cependant, quand je

ssh utilisateur@serveur-A ./script-A.sh

Le script-A s'exécute, mais provoque une erreur de variable non définie dans change-environment.sh.

change-environment.sh s'exécute dans le shell c (je n'ai aucun contrôle sur le script donc la méthode que j'ai utilisée est à peu près la seule manière de l'utiliser), mais tout le reste est en bash.

J'avais trouvé une question similaire sur Je peux exécuter un script localement mais je ne peux pas faire "ssh HOSTNAME /chemin/vers/script.sh". Cependant, il n'y avait pas de solution au problème et cela remontait à un an.

1voto

Frangossauro Points 1371

Lorsque vous utilisez ssh avec une commande, il peut ne pas créer réellement un shell de connexion même si votre script utilise #!/bin/bash -l.

Essayez ssh utilisateur@serveur-A bash -l, puis exécutez votre script. Vous pouvez également créer quelque chose comme

    #!/bin/bash
    export 

Ensuite, exécutez-le après vous être connecté manuellement (ssh utilisateur@serveur-A) et lorsque vous utilisez ssh avec une commande (ssh utilisateur@serveur-A nom-de-ce-script.sh).

Par exemple, sur Mac OS X, en utilisant ssh martin@nathan bash -l ne définit même pas PS1, alors qu'un shell interactif normal ssh martin@nathan le fait.

Une autre différence importante est qu'un pseudo-terminal n'est alloué que lors de l'exécution de façon interactive (connexion sans commande).

1voto

KeshV Points 111

Votre script aurait probablement besoin d'un terminal (tty). Vous pouvez simplement exécuter ssh et forcer un pseudo-terminal et il devrait fonctionner parfaitement

ssh -tt remote_host "votre_script"

0voto

meds Points 525

Vous avez vraiment besoin de comparer vos environnements, le fichier .profile vous aide à les garder identiques. Pourquoi ne pas parcourir votre code et voir sur quels variables d'environnement il dépend? Ensuite, vous pouvez corriger ces variables d'environnement à l'intérieur de votre script-A. Au fait, je vous conseille également d'appeler les scripts bash de cette manière pendant le débogage:

bash -v

(verbeux)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X