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.