我想清理我的主文件夹,并设法将大部分配置文件移至 .config 文件夹。但是,我无法弄清楚的一个文件是该.bashrc
文件。如何指定 bash 从自定义位置加载 .bashrc?
答案1
命令bash
接受一个--rcfile filename
选项这将:
在交互式 shell 中从文件名(而不是 ~/.bashrc)执行命令。
因此,如果您运行,bash --rcfile ~/.config/bashrc
那么您将加载该文件。
那里不是bashrc_file
一种将其配置为默认从那里加载的方法(您将在哪里配置它?),而不是通过修改重新编译它(更改in的定义shell.c
- 它不是配置选项)。您可以创建一个bash
使用该选项运行的包装器--rcfile
,并不变地传递所有其他参数 - 您必须添加它才能/etc/shells
将该包装器设置为您的 shell,并且必须小心执行。这两个选项中的任何一个都是可行的,但要正确执行却并非易事。
如果您使用的是单用户系统,另一种选择是将所有配置放在系统范围的文件中/etc
,但这并不能真正解决问题。您还可以让系统范围的文件检测它的运行方式并自动bash
使用该--rcfile
选项重新执行,但这似乎比其他方法更令人担忧。
我的建议是让自己适应在主目录中拥有一个额外的点文件,但如果您确实做不到,上述方法也是可行的。
答案2
受到 Gnouc 答案的启发,我意识到 bash在相同的情况下会读取/etc/bash.bashrc
和。~/.bashrc
因此,您可以将其放在底部/etc/bash.bashrc
:
if [ -s "${XDG_CONFIG_HOME:-$HOME/.config}/bash/bashrc" ]; then
. "${XDG_CONFIG_HOME:-$HOME/.config}/bash/bashrc"
fi
然后移动~/.bashrc
到$XDG_CONFIG_HOME/bash/bashrc
Bash 仍然会尝试加载,~/.bashrc
这不是问题,因为它不再存在。并将/etc/bash.bashrc
确保从您的新位置加载该文件。
答案3
对于登录 shell,通常~/.bash_profile
包含以下行:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
所以你可以在这里设置你自己的配置文件夹:
BASHRC_CONFIG_DIR=~/config/bash
if [ -f "$BASHRC_CONFIG_DIR/.bashrc" ]; then
. "$BASHRC_CONFIG_DIR/.bashrc"
fi
对于非登录 shell,可以在/etc/bash.bashrc
.