Запустите Zsh с «Пользовательскими параметрами».

У меня есть пара флагов в моей конфигурации zsh, и я пытался найти способ запустить новую оболочку с установленными ими, но пока не нашел решения. Какие-либо предложения? Например, я хочу сделать что-то вроде:

zsh --login --export=RC_BOOTSTRAP:true,RC_DEBUG:true

Изменить 01

По сути, я пытаюсь настроить пользовательские параметры оболочки. Лучший метод, который я придумал до сих пор, это:

# set the flags as environment variables and restart the shell
exec env RC_BOOTSTRAP=true RC_DEBUG=true zsh --login

И в моих файлах запуска у меня есть:

# I don't want these flags to propagate into additional shells
# so they need to be 'unexported'
RC_TMP_BOOTSTRAP=${RC_BOOTSTRAP:-false} && unset RC_BOOTSTRAP
RC_BOOTSTRAP=${RC_TMP_BOOTSTRAP} && unset RC_TMP_BOOTSTRAP
RC_TMP_DEBUG=${RC_DEBUG:-false} && unset RC_DEBUG
RC_DEBUG=${RC_TMP_DEBUG} && unset RC_TMP_DEBUG

Это работает, но довольно уродливо. Какие-либо предложения?

Редактировать 02
На основе решения @gilbert:

exec env RC_FLAGS='RC_BOOTSTRAP=true RC_LOG_LEVEL=4' zsh --login
[[ -n $RC_FLAGS ]] && { eval "$RC_FLAGS"; unset RC_FLAGS; }

person nfarrar    schedule 24.10.2015    source источник
comment
У вас есть файл .zshrc?   -  person kometen    schedule 24.10.2015
comment
Конечно. Мои rcfiles делают некоторые вещи на основе флагов. В настоящее время у меня есть локальная конфигурация, в которой я устанавливаю значения флагов (начальная загрузка, отладка и т. д.). Я ищу более удобный способ перезапустить текущую оболочку (exec zsh --login) и одновременно установить флаг, вместо того, чтобы редактировать флаг в файле конфигурации, а затем перезапускать оболочку.   -  person nfarrar    schedule 24.10.2015


Ответы (2)


Ваши временные переменные не нужны:

: ${RC_BOOTSTRAP:=false}
: ${RC_DEBUG:=false}
# Unexport them
declare +x RC_BOOTSTRAP RC_DEBUG

Кстати, первые две строки не уникальны для zsh; они будут работать в любой POSIX-совместимой оболочке. Каждой переменной, если она еще не присутствует в среде, присваивается значение false.

Запуск оболочки с этими переменными не обязательно требует env:

RC_BOOTSTRAP=true RC_DEBUG=true exec zsh --login
person chepner    schedule 28.10.2015

Немного уродливее синтаксис, но меньше строк:

exec env eval_preset='RC_BOOTSTRAP=true;RC_DEBUG=true' zsh --login

И в файле запуска:

eval "${eval_preset:-true}"; unset eval_preset

Осторожно, на самом деле я их не запускал, поэтому оставляю отладку студенту.

person Gilbert    schedule 24.10.2015