在我修改了.bash_rc
或.bash_profile
文件后,启动GNU Screen时它没有注意到这些更改。
我可以
source ~/.bash_profile
这个命令适用于我当前打开的屏幕窗口,但我需要对每个打开的屏幕窗口重复执行此操作。
如何让 screen 读取我的最新 bash 配置更改?
在我修改了.bash_rc
或.bash_profile
文件后,启动GNU Screen时它没有注意到这些更改。
我可以
source ~/.bash_profile
这个命令适用于我当前打开的屏幕窗口,但我需要对每个打开的屏幕窗口重复执行此操作。
如何让 screen 读取我的最新 bash 配置更改?
如果你希望 screen 总是将你的 shell 视为登录 shell,并且加载与通常启动新 shell 时相同的文件,请将以下内容添加到 ~/.screenrc
(或者根据评论中的指示,可能是 ~/.byobu/.screenrc
):
shell -$SHELL
这样,您就不需要每次启动新的屏幕时手动告诉它要获取您的文件。但是如果您刚刚进行了更改并希望在当前屏幕中反映这些更改,则必须手动告诉它。
您可以在此处找到有关此功能(以及许多其他屏幕详细信息)的文档。基本上,shell
是向屏幕发送的一条命令,告诉它在需要创建新外壳时运行以下内容。$SHELL
是通常保存路径的变量,指向您首选的 shell,前面的短横线 -
表示将其作为登录 shell 运行(通常意味着它会调用您的 ~/.bash_profile
等)。
然而,值得指出的是,屏幕默认只从您启动屏幕的 shell 继承大多数环境变量;登录子 shell 可能会以意想不到的方式更改某些环境变量。我遇到过一个问题,其中我的 $PATH 的某些元素基本上被排列。感谢 superuser 上特别好的答案,我解决了这个问题。
您可能会注意到可用的 source
命令。值得注意的是,这将源化一个 screen
命令文件,而不是 shell 命令。其他相关(屏幕)命令包括eval
和exec
。
你需要在每个屏幕上都执行此操作,因为它们都是不同的shell。如果你希望每次打开新的shell时都生效更改,建议将更改放在~/.bashrc中。
很显然,你可以使用这个语法一次向所有窗口发送命令:
C-a :
at "#" stuff "source ~/.bash_profile^M"
~/.screenrc
中使用shell -$SHELL
)。 - laggingreflex
ctrl-a :at "#" stuff "source .gn/bashrc^M"
命令并运行个人根bashrc(从取消别名rm cp mv开始),并使所有窗口都来源于个性化的rc文件。请注意,^M是两个字符抵消和M。 - Graham Nicholls