zsh - различать исходный файл ~/.zshrc и оболочку, изначально читающую.zshrc
Есть ли команда или переменная окружения, которые я могу проверить в моем ~/.zshrc
что это будет отличать, когда я бегу source ~/.zshrc
обновить мою конфигурацию и когда оболочка читает ~/.zshrc
как это инициализируется?
Пока что мое решение - установить переменную в конце ~/.zshrc
и проверить эту переменную в последующем действии, но мне любопытно, есть ли более чистый способ напрямую получить эту информацию из системы или окружения, а не взламывать ее вместе таким образом, который кажется таким хрупким....
# 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
это было просто загружено в память.
1 ответ
$ZSH_EVAL_CONTEXT
является "toplevel"
если вы вызываете скрипт из оболочки. (например ./script
)$ZSH_EVAL_CONTEXT
является "toplevel:file"
если вы исходный сценарий. (например source script
)$ZSH_EVAL_CONTEXT
является "file"
если он запускается автоматически как конфигурация времени выполнения. (лайк ~/.zshrc
было бы.)
Нашел переменную Alasdair.