自定义文件夹中的 bashrc

自定义文件夹中的 bashrc

我想清理我的主文件夹,并设法将大部分配置文件移至 .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.

相关内容