zsh - rozróżnia źródło ~ / .zshrc od powłoki początkowo czytającej .zshrc

4

Czy jest w mojej komendzie zmienna polecenia lub zmiennej środowiskowej, którą można ~/.zshrcby rozróżnić, kiedy uruchamiam się, source ~/.zshrcaby zaktualizować moją konfigurację, i kiedy powłoka czyta, ~/.zshrcgdy jest inicjowana?

Jak dotąd moim rozwiązaniem jest ustawienie zmiennej na końcu ~/.zshrci przetestowanie tej zmiennej przy kolejnej analizie, ale jestem ciekawy, czy istnieje lepszy sposób na bezpośrednie uzyskanie tych informacji z systemu lub środowiska zamiast hakowania ich razem w sposób, który wydaje się taki delikatny ...

# somewhere in ~/.zshrc

if [[ -n $CONSOLE_ALREADY_RUNNING ]]; then
    echo "we've alredy loaded ~/.zshrc"
    echo "so you must be sourcing it"
fi

# many more lines of ~/.zshrc commands

# last line of ~/.zshrc
export CONSOLE_ALREADY_RUNNING=1

Wygląda na to, że powinien istnieć bardziej przejrzysty sposób na sprawdzenie, czy po prostu ładuję ponownie, source /.zshrcczy też .zshrcjest wykonywana, ponieważ nowa instancja zshzostała właśnie załadowana do pamięci.

Ryan Erwin
źródło
Duplikat między witrynami: w jaki sposób skrypt zsh może sprawdzić, czy jest pozyskiwany?
DavidPostill
Wyszukiwanie „zsh skąd mam wiedzieć, czy skrypt został pobrany” dałoby ci odpowiedź jako drugi link.
DavidPostill
@DavidPostill, Dziękujemy za pomoc. Szukałem wszystkiego, co mogłem wymyślić, ale ciągle myślałem o „różnicowaniu ...” Odniesienia, które znalazłem, były tylko w następujący sposób: różnica między źródłem a. i wszyscy skupiali się na bashu, mimo że szukałem zsh ... W każdym razie, ty i Timotree znaleźliście odpowiedź. Dziękuję bardzo każdemu z was!
Ryan Erwin,

Odpowiedzi:

4

$ZSH_EVAL_CONTEXTjest, "toplevel"jeśli wywołasz skrypt ze powłoki. (na przykład ./script) $ZSH_EVAL_CONTEXTdzieje się, "toplevel:file"jeśli skrypt zostanie pobrany. (na przykład source script) $ZSH_EVAL_CONTEXTjest, "file"jeśli jest uruchamiany automatycznie jako konfiguracja środowiska wykonawczego. (jak ~/.zshrcby to było.)

Znaleziono zmienną tutaj .

timotree
źródło
Niesamowite. Dziękuję @timotree. Pomyślałem, że musi istnieć odpowiedni sposób, aby to zrobić ... ZSH_EVAL_CONTEXT jest dokładnie tym, czego szukałem, ale nie znając nazwy, miałem bardzo trudny czas ze znalezieniem go! Mój pierwszy post w Stackuser ... Dziękuję bardzo za pomoc!
Ryan Erwin,
@Ryan Cała przyjemność po mojej stronie! Podziękowania należą się także Davidowi Postillowi za pomoc w znalezieniu go.
timotree