zsh - различать исходный файл ~ / .zshrc и оболочку, изначально читающую .zshrc

584
Ryan Erwin

Есть ли в моей команде переменная или переменная среды, в которой можно ~/.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который был только что загружен в память.

4
Межсайтовый дубликат: [Как может скрипт zsh проверить, поступает ли он из источника?] (// unix.stackexchange.com/q/73008) DavidPostill 7 лет назад 0
Поиск "zsh, как я узнаю, что скрипт был получен" дал бы вам ответ в качестве второй ссылки. DavidPostill 7 лет назад 0
@DavidPostill, спасибо за вашу помощь. Я искал все, что мог придумать, но я продолжал думать «дифференцировать ...». Ссылки, которые я нашел, были только по принципу: разница между источником и. и все сосредоточились вокруг bash, хотя я искал zsh ... В любом случае, вы и Тимотри нашли ответ. Большое спасибо каждому из вас! Ryan Erwin 7 лет назад 0

1 ответ на вопрос

4
timotree

$ZSH_EVAL_CONTEXTэто "toplevel"если вы звоните сценарий из командной строки. (например ./script) $ZSH_EVAL_CONTEXT, "toplevel:file"если вы используете сценарий. (например source script) $ZSH_EVAL_CONTEXT, "file"если он запускается автоматически как конфигурация времени выполнения. (вроде ~/.zshrcбы.)

Нашел переменную здесь .

Потрясающие. Спасибо @timotree. Я думал, что должен быть правильный способ сделать это ... ZSH_EVAL_CONTEXT - это именно то, что я искал, но, не зная имени, мне было очень трудно найти его! Мой первый в истории пост Stackuser ... Большое спасибо за вашу помощь! Ryan Erwin 7 лет назад 0
@ Райан Мое удовольствие! Кредит также идет к DavidPostill для того, чтобы помочь мне найти это. timotree 7 лет назад 0

Похожие вопросы