2016-05-07 46 views
0

在任何给定的登录会话中,是否有方法让环境变量或某些类似的构造持续存在于所有bash终端实例中?Bash:每个登录环境变量

我想要做的是有一个可变的提示,我可以随心所欲地切换(对于所有的终端窗口,未来,或许也是当前的)。切换的过程并不太重要,但是我想让它成为一个不可或缺的东西。

到目前为止,最好的选择似乎是在.bashrc中有一组硬编码的值,我的'切换器'脚本会编辑这些值,但这看起来有些冒失,并且如果有任何轻微的错误。

+1

请定义'bash终端实例'和'登录会话',以及如何启动这些shell。 –

+1

您无法更改已启动的进程的环境。您可以使bashrc从第三个位置(由文件或环境设置)加载变量,然后在设置提示时使用它。 – xvan

+1

你可以从你的'.bashrc'的单独文件'源'你的'PS1'变量,你可以改变'PS1'的值,然后在运行的shell中再次获取它。这样你的切换器可以是*函数*或*别名*。 –

回答

1

我会去的最简单的解决方案:将数据写入一个文件,而不是一个变量。

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

编辑:你也可以让助手在每个登录文件中设置变量。

1

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

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

use_prompt_2() { 
    PS1="\[email protected]\h \$" 
} 

您还可以使用PROMPT_COMMAND来检查您的环境以选择提示。添加类似以下内容到你的.bashrc还有:

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

PROMPT_COMMAND=dynamic_prompt 
+2

你可以改变一个文件,然后在'PROMPT_COMMAND'中检查文件是否有变化,如果有变化,就用它们作为提示。这样你就可以一次“改变”所有活动终端的提示。 – andlrc

+0

这是一个好主意。我试图找出是否有基于信号的解决方案,但文件会更简单。 – chepner

+0

告诉我,如果你得到一些信号,会很有趣:-) – andlrc