Czy istnieje plik Bash, który zawsze będzie pozyskiwany w trybie interaktywnym, bez względu na to, czy jest to login czy brak logowania?


10

O ile mi wiadomo, interaktywne powłoki mogą się zalogować lub nie, a pliki startowe są dla nich różne.

  • Jeśli interaktywny + powłoka logowania → /etc/profilewtedy pierwszy Tekstu ~/.bash_profile, ~/.bash_loginoraz~/.profile
  • Jeśli powłoka interaktywna + non-login → /etc/bash.bashrcto~/.bashrc

Chcę ustawić niektóre zmienne za każdym razem, gdy używam powłoki interaktywnej, niezależnie od tego, czy jest to powłoka logowania, czy nie.



1
@strugee Nie, to pytanie nie dotyczy zmiennych środowiskowych.
Gilles „SO- przestań być zły”

@Gilles tak, ale twoja odpowiedź dotyczy równie dobrze.
strugee

1
@strugee To dlatego, że wykroczyłem poza bezpośrednie pytanie i poruszyłem temat peryferyjny. Jeden akapit w jednej odpowiedzi nie tworzy duplikatu. Pytania są duplikatami tylko wtedy, gdy mają zasadniczo identyczne odpowiedzi, a nie jeśli jedna odpowiedź zawiera wystarczającą ilość materiału, aby odpowiedzieć na drugą.
Gilles „SO- przestań być zły”

Odpowiedzi:


10

Nie, nie ma. Tak, to wada projektowa.

Użyj następującej treści w ~/.bash_profile:

if [ -e ~/.profile ]; then . ~/.profile; fi
if [[ -e ~/.bashrc && $- = *i* ]]; then . ~/.bashrc; fi

Strzeż się, że bash ma jeszcze dziwniejsze dziwactwo: gdy jest to nieinteraktywna powłoka logowania, a proces nadrzędny to rshdlub sshdźródła bash ~/.bashrc(ale nie ~/.bash_profilelub ~/.profile). Więc możesz umieścić to na górze .bashrc:

if [[ $- != *i* ]]; then return; fi

Zobacz także Różnica między .bashrc i .bash_profile oraz Różnica między powłoką logowania a powłoką niezalogowaną ?


Te dziwactwa są ze względów bezpieczeństwa (nie ładuj nieoczekiwanych plików, gdy działają w ustawieniach wrażliwych na bezpieczeństwo).
vonbrand

2
@vonbrand Er, co? Nie, te dziwactwa nie mają absolutnie nic wspólnego z bezpieczeństwem. Nie ma w tym żadnych „nieoczekiwanych plików” (z wyjątkiem tego, że ładowanie .bashrcw nieinteraktywnym ustawieniu faktycznie może się liczyć jako nieoczekiwane), ani sprawdzenie kontekstu wrażliwego na bezpieczeństwo.
Gilles „SO- przestań być zły”

Czy to metoda zapobiegania pętlom?
Braiam

1
@Braiam What loops?
Gilles „SO- przestań być zły”
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.