Znam różnicę między dwoma skryptami logowania bash:
.bashrc
jest uruchamiany tylko przez powłoki „niezalogowane”.
.bash_profile
(lub .bash_login
lub .profile
) jest wykonywany przez powłoki „login”.
Czy ktoś ma jakieś dobre przykłady tego, które rzeczy lepiej pasują do wykonania tylko logowania, na przykład, że umieszczam je tylko .bash_profile
, ale tak naprawdę nie mają sensu .bashrc
?
(Wiem, że większość z nas pochodzi z źródła , więc wydaje .bashrc
się .bash_profile
, że nie ma większego sensu w odwrotnym pytaniu ...)
Odpowiedzi:
Ponieważ a
.bashrc
jest dla powłok niezalogowanych, unikam wszelkich poleceń, które odbijają się echem na ekranie. Zetknąłem się również z doświadczeniami, w których instrukcje echa.bashrc
spowodują, że polecenia sftp i rsync zawiodą (a może także polecenia scp).Poza tym na ogół nie uruchamiasz ssh-agent z nieinteraktywnej powłoki. Więc mam to
.bash_profile
.źródło
.bashrc
zakłócaniu metod zdalnego przesyłania plików zaimplementowanych za pomocą standardowych strumieni , rozwiązaniem jest umieszczenie takich poleceń pod kodem, który sprawdza, czy powłoka jest interaktywna i kontynuuje tylko, jeśli tak jest. Domyślne użytkowników.bashrc
plików w Ubuntu, kopiowane z/etc/skel/.bashrc
podczas tworzenia konta, jak i systemowy/etc/bash.bashrc
, już zawierać kod, który sprawdza i powroty jeśli powłoka jest Nieinteraktywny (choć trzeba jeszcze umieścić swoich poleceń wyjściowych produkujących pod nimi).Byobu to świetny przykład czegoś, czego nigdy nie powinieneś wkładać
.bashrc
.W przeciwnym razie będzie rekurencyjnie uruchamiał się na każdym ze swoich „wirtualnych terminali” ;-)
Możesz jednak spróbować, to trochę zabawne.
Właśnie dlatego go
.profile
włożyłeś, więc byobu (który tak naprawdę jest tylko otulaczem ekranu) jest ładowany tylko raz, podczas logowania. Sam byobu może rozpocząć nowe interaktywne sesje bash.źródło