Zrozumiałem, .bash_profile
że zawsze będzie się przywoływać przy użyciu loginu SSH.
Nie widzę jednak włączonych różnych ustawień, chyba że wykonam następujące czynności:
ssh $host "source ~/.bash_profile ; echo $PATH "
.:/mnt/spark-1.4.1/bin:/mnt/spark-1.4.1/sbin:/mnt/scala-2.11.2/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
Kiedy po prostu to robię:
ssh $host "echo $PATH "
Informacje o ŚCIEŻCE są tylko domyślnymi
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
Użytkownik jest rootem, a domyślną powłoką jest bash.
$ ll /bin/sh
lrwxrwxrwx 1 root root 4 Aug 6 19:54 /bin/sh -> bash
Aktualizacja powłoki root'a to bash
grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
ssh $host "echo $PATH"
wywoła echo lokalnego komputera / konta$PATH
, ponieważ podwójne cudzysłowy nie blokują rozwijania parametrów ani rozszerzania tyldy, więc te rzeczy są rozwijane na lokalnym komputerze przed wykonaniemssh
polecenia. Jeśli chcesz zobaczyć$PATH
maszynę, na której SSHing, musisz użyć pojedynczych cudzysłowów wokół polecenia zdalnego:ssh $host 'echo $PATH'
Odpowiedzi:
Czy masz
.bashrc
zestaw plików? Może być uszkodzony, zepsuty lub ma coś, co powoduje, że przetwarzanie.bashrc
dławika i awarii. W rezultacie nie dochodzi do punktu, w którym może on czysto strawić / przetworzyć.bash_profile
.Jak pokazano na tej stronie ,
.bashrc
ładuje się przed.bash_profile
:Poleciłbym to sprawdzić,
.bashrc
a może nawet tymczasowo zmienić jego nazwę, na przykład.bashrc_off
wyłączyć, aby przetestować teorię przed dalszym debugowaniem.źródło
/etc/profile
lub nawet/etc/bash.bashrc
. Sprawdź je, a być może na końcu pliku znajduje się „gremlin”.ssh z poleceniem NIE uruchomi powłoki logowania. Zatem bash_profile nie jest pozyskiwany.
Zobacz szczegóły tutaj
źródło
O czym był ten ostatni kawałek
/bin/sh
? Jeśli domyślna powłoka root jest ustawiona na/bin/sh
, wówczasbash
zostanie wywołana w trybie kompatybilności powłoki POSIX Bourne, gdziebash
nie zostaną uruchomione skrypty startowe -specyficzne.źródło
/bin/sh
, to twój problem. Jeśli chcesz użyć.bash_profile
, musisz wywołaćbash
asbash
, ponieważbash
wygląda na to, czy zostało wywołane jakosh
i zmienia zachowanie, aby było bardziejsh
podobne.