Bash:per-login环境变量

Bash:per-login环境变量,bash,environment-variables,Bash,Environment Variables,有没有办法让环境变量或类似的构造在任何给定登录会话中的所有bash终端实例中持久化 我试图做的是有一个可变的提示符,我可以随意切换(对于所有终端窗口、未来窗口,可能也是当前窗口)。转换的过程并不太重要,但我想让它成为一个固定的过程,然后忘掉它 到目前为止,最好的选择似乎是在.bashrc中有一组硬编码的值,我的“切换器”脚本将对其进行编辑,但这似乎有点老套,如果出现任何小错误,很容易破坏所有内容。无法立即更改每个活动shell中的提示,但是您可以为.bashrc定义函数,您可以随意调用这些函数来

有没有办法让环境变量或类似的构造在任何给定登录会话中的所有bash终端实例中持久化

我试图做的是有一个可变的提示符,我可以随意切换(对于所有终端窗口、未来窗口,可能也是当前窗口)。转换的过程并不太重要,但我想让它成为一个固定的过程,然后忘掉它


到目前为止,最好的选择似乎是在.bashrc中有一组硬编码的值,我的“切换器”脚本将对其进行编辑,但这似乎有点老套,如果出现任何小错误,很容易破坏所有内容。

无法立即更改每个活动shell中的提示,但是您可以为
.bashrc
定义函数,您可以随意调用这些函数来更改提示

use_prompt_1 () {
    PS1="\w \$"
}

use_prompt_2 () {
    PS1="\u@\h \$"
}
您还可以使用
PROMPT\u命令
检查您的环境以选择提示。在
.bashrc
中也添加以下内容:

dynamic_prompt () {
    if [[ $PWD =~ some_regex ]]; then
        use_prompt_1
    else
        use_prompt_2
    fi
}

PROMPT_COMMAND=dynamic_prompt

无法一次更改每个活动shell中的提示,但是您可以为
.bashrc
定义函数,您可以随意调用该函数来更改提示

use_prompt_1 () {
    PS1="\w \$"
}

use_prompt_2 () {
    PS1="\u@\h \$"
}
您还可以使用
PROMPT\u命令
检查您的环境以选择提示。在
.bashrc
中也添加以下内容:

dynamic_prompt () {
    if [[ $PWD =~ some_regex ]]; then
        use_prompt_1
    else
        use_prompt_2
    fi
}

PROMPT_COMMAND=dynamic_prompt

我会选择最简单的解决方案:将数据写入文件而不是变量

您还可以在.bashrc中创建一些帮助程序来自动检索/设置值。文件似乎满足了你的所有要求


编辑:您还可以让助手在文件的每次登录时设置变量。

我会选择最简单的解决方案:将数据写入文件而不是变量

您还可以在.bashrc中创建一些帮助程序来自动检索/设置值。文件似乎满足了你的所有要求


编辑:您还可以让助手在文件中的每个登录上设置变量。

请定义“bash终端实例”和“登录会话”,以及如何启动这些shell。您不能更改已启动进程的环境。您可以让bashrc从第三个位置(由文件或环境设置)加载变量,然后在设置提示时使用它。您可以从
中的一个单独的文件中
source
您的
PS1
变量。bashrc
可以更改
PS1
的值,然后在运行的shell中再次对其进行源代码设置。这样,您的切换器可以是一个函数或别名。为什么需要这个?我并不是说你不需要它,但如果我们知道原因,我们可以建议一个替代方案。@JuliePelletier,我不完全确定专有名称是什么,但“bash terminal instances”是我的终端仿真器的实例(windows);“登录会话”是指从给定用户帐户登录时开始、从给定用户帐户注销时结束的会话。请定义“bash终端实例”和“登录会话”,以及如何启动这些shell。不能更改已启动进程的环境。您可以让bashrc从第三个位置(由文件或环境设置)加载变量,然后在设置提示时使用它。您可以从
中的一个单独的文件中
source
您的
PS1
变量。bashrc
可以更改
PS1
的值,然后在运行的shell中再次对其进行源代码设置。这样,您的切换器可以是一个函数或别名。为什么需要这个?我并不是说你不需要它,但如果我们知道原因,我们可以建议一个替代方案。@JuliePelletier,我不完全确定专有名称是什么,但“bash terminal instances”是我的终端仿真器的实例(windows);“登录会话”是指从给定用户帐户登录时开始,注销时结束的会话。您可以更改文件,然后在
PROMPT\u命令中检查该文件是否有更改(如果有),并将其用作提示。通过这种方式,您可以一次“更改”所有活动终端的提示。这是一个好主意。我试图找出是否有基于信号的解决方案,但文件会更简单。如果您得到与信号相关的信息,请告诉我,这会很有趣:-)您可以更改文件,然后在
PROMPT\u命令中
检查该文件是否有更改,如果有,请将其用作提示。通过这种方式,您可以一次“更改”所有活动终端的提示。这是一个好主意。我试图找出是否有一个基于信号的解决方案,但文件会更简单。告诉我,如果你有一些与信号相关的东西,会很有趣:-)