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.

Другие вопросы по тегам