使用'自定义选项启动Zsh'

时间:2015-10-24 14:12:45

标签: zsh zshrc

我的zsh配置中有一些标志 - 而且我一直试图找到一种方法来启动一个新的shell设置,但尚未找到解决方案。有什么建议?例如,我希望做类似的事情:

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

修改01

基本上,我尝试设置自定义shell选项。我到目前为止提出的最佳方法是:

# 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; }

2 个答案:

答案 0 :(得分:1)

您的临时变量不是必需的:

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

顺便说一下,前两行不是zsh独有的;它们适用于任何兼容POSIX的shell。如果环境中尚未存在,则每个变量都设置为false

使用这些变量启动shell不一定需要env

RC_BOOTSTRAP=true RC_DEBUG=true exec zsh --login

答案 1 :(得分:0)

语法有点丑陋但行数较少:

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

在启动文件中:

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

小心,我实际上并没有运行这些,所以我给学生留下了调试。