Я пытаюсь содержать область видимости переменной в оболочке, а дети не видят ее в zsh. Например, я набираю это в .zshrc:
GREP_OPTIONS=--color=always
Но если я запускаю скрипт оболочки со следующим:
#!/bin/bash
echo $GREP_OPTIONS
Выход:
--color=always
в то время как я хочу, чтобы он был нулевым (скрипт выше не должен видеть переменную GREP_OPTIONS).
В bash можно сказать export -n GREP_OPTIONS=--color=always
, что это не допустит. Как мне сделать это в Zsh?
shell-script
zsh
environment-variables
PonyEars
источник
источник
export -n
просто экспортирует экспортированную переменную.Ответы:
export
в zsh это сокращение дляtypeset -gx
, где атрибутg
означает «глобальный» (в отличие от локального для функции), а атрибутx
означает «экспортированный» (то есть в среде). Таким образом:Это также работает в ksh и bash.
Если вы никогда не экспортируете
GREP_OPTIONS
в первую очередь, вам не нужно экспортировать его.Вы также можете использовать косвенный переносимый способ: сброс переменной отменяет ее экспорт. В ksh / bash / zsh это не работает, если переменная доступна только для чтения.
источник
env -u GREP_OPTIONS your-script
с некоторымиenv
реализациями (любая оболочка). Или(unset GREP_OPTIONS; exec your-script)
export_all
(-a
)? Но даже тогдаtypeset +x GREP_OPTIONS
бы не экспортировать переменную. Если вы не можете найти, что не так, попробуйте бинарный поиск: создайте резервную копию.zshrc
, удалите вторую половину, посмотрите, не возникла ли проблема, затем добавьте третий квартал или сократите до первого квартала и повторите.Вы можете использовать анонимную функцию для предоставления области видимости для переменной. От
man zshall
:Но кроме этого - если вы не используете
export
в вашем.zshrc
вообще, переменная должна быть видна только в текущей интерактивной сессии, и она не должна быть экспортирована в подоболочек.Как пояснил в своем комментарии terdon:
export -n
inbash
просто приводит к удалению свойства «export» из переменной, поэтому использованиеexport -n GREP_OPTIONS=--color=always
эквивалентно тому, что экспорт вообще не используется -GREP_OPTIONS=--color=always
.Другими словами, чтобы получить желаемое поведение, просто не используйте
export
. Вместо этого в вашем.zshrc
, вы должны иметьЭто сделает переменную доступной для всех оболочек (интерактивных, без входа в систему), которые вы запускаете, так же, как вы этого хотите, но она не будет экспортирована в дочерние оболочки.
источник