137 votes

Comment définir $ PATH de telle sorte que `ssh user @ host command` fonctionne?

Je n'arrive pas à définir une nouvelle $CHEMIN tel qu'il est utilisé lors de l'exécution des commandes via ssh user@host command. J'ai essayé d'ajouter export PATH=$PATH:$HOME/new_path le dossier ~/.bashrc et ~/.profil sur la machine distante, mais l'exécution d' ssh user@host "echo \$PATH" montre que le changement n'a pas été ramassé (il montre le répertoire /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games). La distance de fonctionnement de la machine Ubuntu 8.04.

Je suis sûr que je pourrais le modifier dans /etc/profile, mais ce n'est pas une solution propre et il ne fonctionne que lorsque l'on a un accès root.

190voto

singpolyma Points 5586

Comme l'a dit Grawity , ~ / .bashrc est ce que vous voulez, car il provient de shells non-interactifs et non interactifs.

Je suppose que le problème que vous rencontrez concerne le fichier Ubuntu ~ / .bashrc par défaut. Cela commence généralement par quelque chose comme ceci:

 # If not running interactively, don't do anything
[ -z "$PS1" ] && return
 

Vous voulez mettre n'importe quoi pour les shells non interactifs avant cette ligne.

30voto

grawity Points 6338

Avez-vous un ~/.bash_login ou ~/.bash_profile?

Bash en mode interactif, les contrôles de ces fichiers, et utilise le premier existant, dans cet ordre:

  1. ~/.bash_profile
  2. ~/.bash_login
  3. ~/.profile

Donc, si vous avez un ~/.bash_profile, alors que les modifications que vous faites à l' ~/.profile sera à gauche de l'invisible.

Bash en mode non-interactif lit le fichier ~/.bashrc (qui est aussi souvent source avais de l'scripts interactifs.)

ssh semble utiliser le mode non-interactif, de sorte ~/.bashrc devrait être suffisant. Quand à avoir des problèmes de ce genre, je l'habitude d'ajouter un peu d'echo pour voir quels fichiers sont en cours d'exécution.

20voto

Hasturkun Points 18653

La documentation ssh indique:

Si commande est spécifiée, elle est exécutée sur l'hôte distant au lieu d'un shell de connexion.

c'est pourquoi l'ajout aux fichiers bashrc ne fonctionne pas. vous avez cependant les options suivantes:

  1. Si l'option PermitUserEnvironment est définie dans la configuration sshd, vous pouvez ajouter votre paramètre PATH à ~/.ssh/environment

  2. ssh remotemachine 'bash -l -c "somecommand"'

8voto

Chas. Owens Points 40887

Vous pouvez toujours dire:

 ssh remotemachine 'export PATH=wedontneedastinkingpath; echo $PATH'
 

2voto

Indie Points 179

J'ai moi-même eu le même problème, résolu avec:

 ssh user@remotehost PATH=\$HOME/bin:\$PATH\; remote-command
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X