【问题标题】:Watch for environment variable change - ZSH注意环境变量变化 - ZSH
【发布时间】:2020-08-27 15:22:03
【问题描述】:

有没有办法在 zsh/bash 中观察环境变量的变化?例如,在切换我的 kubernetes 环境时,我希望能够读取设置的变量并对我的终端窗口进行更改(如果我处于生产与开发等状态)。

我们切换环境的方式是我们工具的一部分。我希望能够在我自己的机器上扩展它,而无需更新任何工具。如果无法观察环境变量的变化,我也在寻找一种使用类似于builtin 的方法。

Example: create a function of the same name as an alias, call that alias from within the function, then do some other action afterward.

【问题讨论】:

  • 如果你想例如根据变量更新终端标题,您通常只需在每个提示符上输出 ansi 序列。监听变量的变化是没有意义的,因为这些变化只能由 shell 本身进行,而不能由任何外部进程进行。
  • 我想要做的,更准确地说,如果我进入生产环境,将终端的背景颜色更新为红色(单独变量),或者如果我回到黑暗我在开发环境中
  • 做一个man terminfo
  • 您可以使用zsh 中的precmd 钩子或bash 中的PROMPT_COMMAND 来检查值并做出适当的响应。两个 shell 都没有专门监控给定变量的钩子。
  • @chepner 谢谢你,这太完美了。您想将此作为我可以标记为已接受答案的答案吗?

标签: bash macos environment-variables zsh


【解决方案1】:

两个 shell 都提供了一种在显示提示之前执行任意代码的方法;您可以使用它来检查特定变量的值并采取适当的措施。

.bashrc:

# The function name doesn't matter; it's just easier
# to set PROMPT_COMMAND to the name of a function than
# to arbitrary code.
pre_prompt () {
    if [[ $SOME_VAR == "prod" ]]; then
        doSomething
    else [[
        doSomethingElse
    fi
}

PROMPT_COMMAND=pre_prompt

.zshrc:

precmd () {
    if [[ $SOME_VAR == "prod" ]]; then
        doSomething
    else [[
        doSomethingElse
    fi
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多