Lorsque j'exécute mon programme de manière interactive, cela fonctionne bien:
ssh somehost
$ ~/some/path/somescript.py
Lorsque j'exécute mon programme directement sur ssh, cela ne fonctionne pas. La variable PYTHONPATH
n'est pas définie, car elle .bashrc
n'est pas d'origine.
ssh somehost ~/some/path/somescript.py
Si je cours ssh somehost 'source ~/.bashrc; ~/some/path/somescript.py'
, ça marche bien.
Mais ce dernier ne fonctionnerait pas pour d'autres personnes, par exemple en utilisant tcsh sans en avoir ~/.bashrc
du tout).
Quelle est la commande pour exécuter une chose via ssh sur un autre hôte qui fonctionne pour tous les shells?
bash
ssh
environment-variables
remote
bzdjamboo
la source
la source
bash
, il source.bash_profile
ou.profile
pour une connexion interactive et.bashrc
pour une connexion non interactive. Si votre shell de connexion est appelé bashsh
ou ash ou ksh, il génère.profile
une connexion interactive et rien pour une connexion non interactive.Réponses:
Aucun fichier standard par utilisateur n'est exécuté pour les connexions non interactives. Vous devez soit rendre le programme autonome, afin qu'il puisse trouver ses dépendances sans s'appuyer sur des variables d'environnement non par défaut, soit définir explicitement l'environnement, généralement avec
Vous ne devez pas définir de variables d'environnement dans
.bashrc
: ce fichier est destiné aux shells interactifs et est lu dans chaque instance de bash. Les variables d'environnement doivent être définies.profile
, ce qui est lu lorsque vous vous connectez. Mis à part le très petit nombre de personnes qui n'utilisent pas un shell de style Bourne comme shell de connexion,.profile
cela fonctionne pour tout le monde, qu'elles utilisent bash ou zsh ou csh ou poisson interactivement. Voir aussi Différence entre .bashrc et .bash_profile , Quels fichiers de configuration doivent être utilisés pour configurer les variables d'environnement avec bash? .Cela étant dit, il existe un moyen de générer un script chaque fois que vous vous connectez via ssh avec une clé particulière. Voir Existe - t-il un moyen de transmettre les informations de configuration du shell lors de la connexion SSH à un hôte? , sh fichiers de démarrage sur ssh .
la source
J'ai eu le même problème, mais pour moi, la solution était différente. Mon utilisateur n'a pas été configuré pour utiliser bash comme shell, il a utilisé zsh comme shell à la place, donc les fichiers dot bash n'ont pas été exécutés lors de la connexion. Ouvrez / etc / passwd avec un éditeur de texte et recherchez votre nom d'utilisateur et le shell qu'il utilise:
Voici à quoi ressemble mon entrée utilisateur. Notez qu'il dit / bin / zsh au lieu de / bin / bash. Pour zsh, le fichier de points correct est ~ / .zprofile. Son contenu sera exécuté à chaque connexion à l'aide de ssh.
la source