Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 注意环境变量的变化-ZSH_Bash_Macos_Environment Variables_Zsh - Fatal编程技术网

Bash 注意环境变量的变化-ZSH

Bash 注意环境变量的变化-ZSH,bash,macos,environment-variables,zsh,Bash,Macos,Environment Variables,Zsh,有没有办法监视zsh/bash中环境变量的更改?例如,在切换kubernetes环境时,我希望能够读取设置的变量,并在生产与开发等方面对终端窗口进行更改 我们切换环境的方式是我们工具的一部分。我希望能够在我自己的机器上扩展,而无需更新任何工具。如果无法观察环境变量的变化,我也在寻找一种使用类似于内置的方法 示例:创建一个与别名同名的函数,从函数中调用该别名,然后执行其他操作。两个shell都提供了在显示提示之前执行任意代码的方法;您可以使用它来检查特定变量的值并采取适当的操作 在.bashrc中

有没有办法监视zsh/bash中环境变量的更改?例如,在切换kubernetes环境时,我希望能够读取设置的变量,并在生产与开发等方面对终端窗口进行更改

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


示例:创建一个与别名同名的函数,从函数中调用该别名,然后执行其他操作。

两个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
precmd () {
    if [[ $SOME_VAR == "prod" ]]; then
        doSomething
    else [[
        doSomethingElse
    fi
}
.zshrc
中:

# 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
precmd () {
    if [[ $SOME_VAR == "prod" ]]; then
        doSomething
    else [[
        doSomethingElse
    fi
}

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