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
à ~ / .bashrc et ~ / .profile sur la machine distante, mais l'exécution ssh user@host "echo \$PATH"
montre que le changement n'a pas été pris en compte (il montre / 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 lorsque l'on a un accès root.
export PATH=$PATH:$HOME/new_path
à la fois ~ / .bash_login et ~ / .bash_profile (en plus des ~ / .bashrc et ~ / .profile précédemment essayés). Aucun des deux ne fonctionne. Dans les deux cas, j'ai dû créer le fichier.Réponses:
Comme l'a dit grawity, ~ / .bashrc est ce que vous voulez, car il provient de shells non interactifs sans connexion.
Je pense que le problème que vous rencontrez est lié au fichier par défaut Ubuntu ~ / .bashrc. Cela commence généralement par quelque chose comme ceci:
Vous voulez mettre n'importe quoi pour les shells non interactifs avant cette ligne.
la source
export PATH=$PATH:$HOME/new_path
ligne ci-dessus et cela a fonctionné. Merci!.zshenv
pour les utilisateurs de zsh, il m'a fallu un certain temps pour le trouver dans les commentaires sur les autres réponsesAvez-vous un
~/.bash_login
ou~/.bash_profile
?Bash en mode interactif vérifie ces fichiers et utilise le premier existant , dans cet ordre:
~/.bash_profile
~/.bash_login
~/.profile
Donc, si vous en avez un
~/.bash_profile
, les changements que vous apportez ne~/.profile
seront pas visibles.Bash en mode non interactif lit parfois le fichier
~/.bashrc
(qui est également souvent source à partir des scripts interactifs.) Par "parfois", je veux dire qu'il dépend de la distribution: assez curieusement, il existe une option de compilation pour l'activer . Debian permet la~/.bashrc
lecture, contrairement à Arch.ssh
semble utiliser le mode non interactif,cela~/.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 source
~/.bashrc
"? Je ne vois pas cette déclaration dans la page de manuel. Merci~/.bashrc
, il semble que vous deviez en plus définir la variable d'environnementBASH_ENV
; voir superuser.com/a/585699/100843 . Pour les shells de connexion non interactifs, vous devrez probablement modifier l'un des trois scripts de démarrage que vous avez mentionnés..zshenv
.zshenv
est toujours source; peu importe que ce soit interactif ou non.La documentation ssh dit:
c'est pourquoi l'ajout aux fichiers bashrc ne fonctionne pas. vous disposez cependant des options suivantes:
Si l'
PermitUserEnvironment
option est définie dans la configuration sshd, vous pouvez ajouter votre paramètre PATH à~/.ssh/environment
ssh remotemachine 'bash -l -c "somecommand"'
la source
man sshd_config
indique qu'il est désactivé par défaut, il est donc peu probable que cette solution fonctionne pour la plupart des gens. 2. Cela fonctionnerait, mais je ne peux pas facilement modifier la commande envoyée à ssh (voir le deuxième commentaire sur ma question).Vous pouvez toujours dire:
la source
En plus de la réponse @signpolyma, vous devrez ajouter votre export avant ces lignes
la source
J'ai juste eu le même problème moi-même, je l'ai résolu avec:
la source