如何让GNU屏幕读取.bash_profile/.bash_rc更改?

Fra*_*wis 40 unix linux bash gnu-screen .bash-profile

在我进行更改后,.bash_rc或者.bash_profile当我启动GNU屏幕时,它无法识别这些更改.我可以

source ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

它适用于我打开的当前屏幕窗口,但我必须为我打开的每个屏幕窗口执行此操作.

如何获取屏幕以读取我的bash配置中的最新更改?

Mik*_*ike 59

如果您希望屏幕始终将您的shell视为登录shell,并且如果刚刚正常启动新shell,则会获取相同的文件,请添加以下内容~/.screenrc(或者~/.byobu/.screenrc,如注释中所指出的那样):

shell -$SHELL
Run Code Online (Sandbox Code Playgroud)

这样,每次启动新屏幕时,都无需手动指示它来源文件.虽然您必须进行更改,并希望这些更改能够反映在当前屏幕中.

可以在此处找到文档(以及许多其他屏幕详细信息).基本上,shell是一个命令屏幕告诉它在需要创建新shell时运行以下命令. $SHELL是保存首选shell路径的常用变量.-前面的破折号$SHELL表示它应该作为登录shell运行(这通常意味着它来源~/.bash_profile等).

但值得指出的是,屏幕默认只是从你开始屏幕的shell继承大多数环境变量; 并且登录子shell可能以意外的方式改变一些环境变量.我碰到了我的$ PATH的元素基本上被置换的情况.由于超级用户的这个特别优秀的答案,我解决了这个问题.

您可能会注意到该source命令可用.重要的是要注意这是一个screen命令文件,而不是shell命令.其他相关(屏幕)命令包括evalexec.


gpo*_*ojd 17

你必须在你打开的每个屏幕上都这样做,因为它们都是不同的shell.如果每次打开新shell时都需要更改,我建议您将更改放在〜/ .bashrc中.

显然,您可以使用以下语法一次向所有窗口发送命令:

C-a :
at "#" stuff "source ~/.bash_profile^M"
Run Code Online (Sandbox Code Playgroud)

  • 我不知道为什么我这样说..bash_profile仅在您第一次登录时获取.每次打开shell时都会执行.bashrc.如果您每次都需要它,我建议您将更改放在.bashrc而不是.bash_profile. (5认同)