在.bashrc中包括其他文件


76

我想在.bashrc中执行一些操作,这些操作我希望存在于系统的另一个文件中。如何将此文件包含到.bashrc中?


是否应该在Unix&Linux Stack Exchange上发布此问题?
Cale Sweeney

Answers:


117

source /whatever/file(或. /whatever/file)添加到.bashrc要包含其他文件的位置。


21
您应该优雅地处理不存在。例如,检查是否存在(test -r path &&。path)或忽略错误(
。path

2
@William Pursell IMO,测试一次更容易,然后编写案例代码,则99.99%的情况永远不会发生。
丹尼尔(Daniel)

5
@丹尼尔,我不同意。发生率为0.01%的事件每秒可能发生数千次。在NFS挂载的$ HOME上安装.bashrc文件可能意味着源文件的失败率大大高于.01%
William Pursell 2013年

59

为防止错误,您需要首先检查以确保文件存在。然后获取文件。做这样的事情。

# include .bashrc if it exists
if [ -f $HOME/.bashrc_aliases ]; then
    . $HOME/.bashrc_aliases
fi

3
同样在.bashrc_aliases或我正在采购的任何文件的末尾,我回显出一条诸如echo“ Aliases loading”之类的语句
Nick

2
我对自己想:“〜是$ HOME,对吧?” las,if [ -f ~/.bashrc_aliases ];行不通。
modle13

7

这是一个班轮!

[ -f $HOME/.bashrc_aliases ] && . $HOME/.bashrc_aliases

有趣的事实:shell(和大多数其他语言)很懒。如果一系列条件由一个连词(也称为“和”或“&&),则评估将从左至右开始。条件之一为假时,将不评估其余表达式,从而有效地“短路”其他表达式。

因此,您可以将要执行的命令放在条件的右侧,除非左侧的每个条件都被评估为“ true”,否则该命令将不会执行。


2

如果您要加载的文件可能不存在,则可以使用for循环使其保持某种优雅。

files=(somefile1 somefile2)
path="$HOME/path/to/dir/containing/files/"
for file in ${files[@]}
do 
    file_to_load=$path$file
    if [ -f "$file_to_load" ];
    then
        . $file_to_load
        echo "loaded $file_to_load"
    fi
done

输出如下所示:

$ . ~/.bashrc
loaded $HOME/path/to/dir/containing/files/somefile1
loaded $HOME/path/to/dir/containing/files/somefile2

当然,您不需要在循环内再次检查文件是否存在吗?(除非磁盘上有非常动态的文件列表)
John Mark Scarborough,

仅检查文件是否存在。如果您当前的工作环境没有列表中描述的文件,则只会在该文件加载时出错并产生视觉噪音。一种更理想的方法是获取文件列表,然后遍历文件列表,而不是定义静态列表。
modle13 '18

0

我更喜欢先检查版本并为路径配置分配变量:

if [ -n "${BASH_VERSION}" ]; then
  filepath="${HOME}/ls_colors/monokai.sh"
  if [ -f "$filepath" ]; then
    source "$filepath"
  fi
fi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.