我的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; }
答案 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
小心,我实际上并没有运行这些,所以我给学生留下了调试。