題 zsh - 區分source~ / .zshrc和shell最初讀取.zshrc


是否有我可以在我的測試中使用的命令或環境變量 ~/.zshrc 這會區分我跑的時候 source ~/.zshrc 更新我的配置以及shell讀取的時間 ~/.zshrc 因為它被初始化了?

到目前為止,我的解決方案是在結尾處設置一個變量 ~/.zshrc 並在隨後的exectuion中測試該變量,但我很好奇是否有更簡潔的方法直接從系統或環境中獲取此信息,而不是以一種感覺如此脆弱的方式將它們混合在一起....

# 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

似乎應該有一些更清潔的方法來測試我是否只是通過重裝 source /.zshrc 或者如果 .zshrc 正在為新的實例執行 zsh 那隻是加載到內存中。


4
2017-12-05 15:06


起源


跨站點副本: zsh腳本如何測試它是否被採購? - DavidPostill♦
搜索“zsh如何知道腳本是否已被採購”會給你答案作為第二個鏈接。 - DavidPostill♦
@DavidPostill,謝謝你的幫助。我搜索了所有我能想到的東西,但我一直在想“區分......”我發現的參考文獻只是沿著這樣的方向:源和區別。即使我正在搜索zsh,所有人都集中在bash周圍......無論如何,你和Timotree都找到了答案。非常感謝你們每個人! - Ryan Erwin


答案:


$ZSH_EVAL_CONTEXT 是 "toplevel" 如果你從shell調用腳本。 (例如 ./script$ZSH_EVAL_CONTEXT 是 "toplevel:file" 如果您採購腳本。 (例如 source script$ZSH_EVAL_CONTEXT 是 "file" 如果它作為運行時配置自動運行。 (喜歡 ~/.zshrc 將會。)

找到變量 這裡


4
2017-12-05 17:06



真棒。謝謝@timotree。我認為必須有一個正確的方法來做到這一點.... ZSH_EVAL_CONTEXT正是我所尋找的,但不知道我找到它的名字真的很難!我的第一篇Stackuser帖子...非常感謝你的幫助! - Ryan Erwin
@Ryan我很高興!感謝DavidPostill幫助我找到它。 - timotree