每当我修改.bashrc
文件时,我都必须转到每个 bash shell 并再次获取它以实现更改。
有一个更好的方法吗?某些运行一次的命令会source ~/.bashrc
在所有打开的 bash shell 中自动执行 a 操作?
答案1
不,我认为这是不可能的。也不应该如此。这基本上相当于一种将代码注入到已启动且活动的 shell 中的方法,并将构成重大的安全威胁。
许多守护进程是旨在做到这一点。典型的方法是向它们发送 HUP(挂断)信号,使它们在重新读取配置文件后重新启动。您可以通过以下方式触发此操作:
pkill -HUP daemon_name
然而,当在 bash 上执行此操作时,bash 只是关闭。它不是守护进程,系统也没有让它表现得像守护进程。
总而言之,随着时间的推移,您可能不会那么频繁地更改 bashrc,这也不是什么大问题。当您进行更改时,如果您需要在运行的 shell 中进行更改,则只需重新获取该文件的源即可。
答案2
bash 中没有内置任何内容。您可以通过 告诉它.bashrc
每次显示提示时重新加载PROMPT_COMMAND
。
## Create a timestamp file, dated like the .bashrc that was read.
## There is a small race condition: if .bashrc is modified as the shell is
## just starting, before getting to this line, this instance won't detect
## that modification.
bashrc_timestamp_file=~/.bashrc-timestamp-$$
touch -r ~/.bashrc "$bashrc_timestamp_file"
## Remove the timestamp file on exit. The timestamp file will be left
## behind on a crash.
trap 'rm "$bashrc_timestamp_file"' EXIT HUP TERM INT QUIT
maybe_reload_bashrc () {
if [[ ~/.bashrc -nt $bashrc_timestamp_file ]]; then
. ~/.bashrc
fi
}
if [[ $PROMPT_COMMAND != *maybe_reload_bashrc* ]]; then
PROMPT_COMMAND="maybe_reload_bashrc
$PROMPT_COMMAND"
fi
额外的文件访问它的价值是很麻烦的。此外,它还对您的文件施加了限制.bashrc
:文件必须是幂等的,即您必须能够多次加载它而不会产生不良影响。例如,在上面的代码片段中,我只在不存在的情况下才进行maybe_reload_bashrc
添加。PROMPT_COMMAND