Kiedy interaktywnie uruchamiam mój program, działa dobrze:
ssh somehost
$ ~/some/path/somescript.py
Kiedy uruchamiam mój program bezpośrednio przez ssh, to nie działa. Zmienna PYTHONPATH
nie jest ustawiona, ponieważ .bashrc
nie jest pozyskiwana.
ssh somehost ~/some/path/somescript.py
Jeśli uruchomię ssh somehost 'source ~/.bashrc; ~/some/path/somescript.py'
, działa dobrze.
Ale ten drugi nie działałby dla niektórych innych ludzi, np. Używając tcsh i nie mając go ~/.bashrc
wcale).
Co jest polecenie, aby uruchomić poprzez ssh na rzecz innego hosta, który działa dla wszystkich muszli?
bash
ssh
environment-variables
remote
bzdjamboo
źródło
źródło
bash
, a następnie nim źródeł.bash_profile
lub.profile
do interaktywnego logowania, a.bashrc
na nieinterakcyjnym logowania. Jeśli twoja powłoka logowania jest wywoływana jako bashsh
lub ash lub ksh, to pobiera.profile
interaktywne logowanie i nic dla nieinteraktywnego logowania.Odpowiedzi:
Nie ma standardowego pliku dla użytkownika uruchamianego dla nieinteraktywnych loginów. Musisz albo uczynić program samodzielnym, aby mógł znaleźć jego zależności bez polegania na domyślnych zmiennych środowiskowych, lub jawnie ustawić środowisko, zwykle za pomocą
Nie powinieneś ustawiać zmiennych środowiskowych w
.bashrc
: ten plik jest przeznaczony dla interaktywnych powłok i jest odczytywany w każdym przypadku bash. Należy ustawić zmienne środowiskowe.profile
, które są odczytywane podczas logowania. Oprócz bardzo małej liczby osób, które nie używają powłoki w stylu Bourne'a jako powłoki logowania,.profile
działają dla wszystkich, bez względu na to, czy używają bash, zsh czy csh lub ryby interaktywnie. Zobacz także Różnica między .bashrc i .bash_profile , Których plików instalacyjnych należy użyć do skonfigurowania zmiennych środowiskowych za pomocą bash? .To powiedziawszy, istnieje sposób na źródło skryptu za każdym razem, gdy logujesz się przez ssh przy użyciu określonego klucza. Zobacz Czy istnieje sposób na przekazanie informacji o konfiguracji powłoki podczas SSHing do hosta? , sh pliki startowe przez ssh .
źródło
Miałem ten sam problem, ale dla mnie rozwiązanie było inne. Mój użytkownik nie był skonfigurowany do używania bash jako powłoki, zamiast tego używał zsh jako powłoki, dlatego pliki kropek bash nie były uruchamiane przy logowaniu. Otwórz / etc / passwd za pomocą edytora tekstu i poszukaj swojej nazwy użytkownika i używanej powłoki:
Tak wygląda mój wpis użytkownika. Zauważ, że jest napisane / bin / zsh zamiast / bin / bash. W przypadku Zsh poprawnym plikiem kropkowym jest ~ / .zprofile. Jego zawartość będzie uruchamiana przy każdym logowaniu przy użyciu ssh.
źródło