Je n'arrive pas à définir un nouveau $ PATH tel qu'il soit utilisé lors de l'exécution de commandes via ssh user@Host command
. J'ai essayé d'ajouter export PATH=$PATH:$HOME/new_path
vers ~/.bashrc et ~/.profile sur la machine distante, mais en exécutant ssh user@Host "echo \$PATH"
indique que la modification n'a pas été prise en compte (elle indique/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games). La machine distante exécute Ubuntu 8.04.
Je suis sûr que je pourrais le pirater dans/etc/profile, mais ce n'est pas une solution propre et cela ne fonctionne que lorsqu'un utilisateur a un accès root.
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.
As-tu un ~/.bash_login
ou ~/.bash_profile
?
Bash en mode interactif recherche ces fichiers et utilise le le premier existant, dans cet ordre:
~/.bash_profile
~/.bash_login
~/.profile
Donc, si vous avez un ~/.bash_profile
, alors quels que soient les changements que vous apportez à ~/.profile
sera laissé invisible.
Bash en mode non interactif parfois lit le fichier ~/.bashrc
(qui provient aussi souvent des scripts interactifs.) Par "parfois", je veux dire que cela dépend de la distribution: assez curieusement, il existe une option de compilation permettant de l'activer. Debian active le ~/.bashrc
lecture, par exemple Arch ne le fait pas.
ssh
semble utiliser le mode non interactif, alors ~/.bashrc
devrait suffire. Lorsque j'ai des problèmes comme celui-ci, j'ajoute généralement quelques échos pour voir quels fichiers sont en cours d'exécution.
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:
Si l'option PermitUserEnvironment
est définie dans la configuration sshd, vous pouvez ajouter votre paramètre PATH à ~/.ssh/environment
ssh remotemachine 'bash -l -c "somecommand"'
Vous pouvez toujours dire:
ssh remotemachine 'export PATH=wedontneedastinkingpath; echo $PATH'
En plus de @signpolyma answer, vous devrez ajouter votre export avant ces lignes
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
J'ai moi-même eu le même problème, résolu avec:
ssh user@remotehost PATH=\$HOME/bin:\$PATH\; remote-command