bashrc文件在运行bash命令之前不会加载

49

我正在运行新安装的 Arch Linux。当我登录用户 (运行bash) 并尝试使用来自 .bashrc 的别名时,它会给我“命令未找到”错误。但是,如果我通过 'bash' 命令重新进入 bash,则该命令可以正常工作。

是的,我已经在bash中了。

初始的环境变量:

SHELL=/usr/bin/bash

运行 bash 后,环境变量仍为:

SHELL=/usr/bin/bash

所以我不太确定问题出在哪里。


实际上这是一个函数:function cl(){cd $@; ls} - mauzy_broadway
可能是重复的问题:https://dev59.com/PHRC5IYBdhLWcg3wFNDX#415444 - Simon
2个回答

94

阅读"bash(1)"中的"INVOCATION"章节以获得完整的细节(这是bash的man页面,请使用man bash)。你登录后的第一个shell是"login shell",这意味着.bashrc文件不会被调用。你的第二个调用将创建一个交互式shell,在该shell中.bashrc文件将被调用。

如果你希望始终处理你的.bashrc文件内容,你可以将以下行添加到你的.bash_profile文件中,如果该文件不存在,则创建该文件:

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

根据其手册,bash "[...] 按照 ~/.bash_profile, ~/.bash_login, 和 ~/.profile 的顺序查找,并读取并执行在第一个存在且可读的文件中的命令。" 你本地系统的惯例和政策将决定这些文件中哪些已经存在(如果有的话)。

警告一句:请注意,创建一个新的 .bash_profile 文件可能会意外地防止读取和执行已经存在的 .bash_login 或者 .profile 文件中的命令,从而改变后续登录的行为。


4
如果还没有 '~/.bash_login' 文件,请创建它。 - Jean Davy
2
或者对于任何Bourne兼容的登录shell,可以使用~/.profile。 (bash) - Qwerty
1
@Qwerty:如果您维护环境,使得/.bash_profile和/.bash_login不存在,则使用/.profile即可。从4.2版本的bash man页面中可以看到:“当bash作为交互式登录shell或非交互式shell使用--login选项调用时,它首先从文件/etc/profile读取并执行命令(如果该文件存在)。在读取该文件后,它按顺序查找/.bash_profile、/.bash_login和/.profile,并从第一个存在且可读的文件中读取并执行命令。” - sjnarv
谢谢大家提供的信息,我刚开始使用AIX,发现很难自动加载bashrc文件,机器上没有/etc/profile、/.bash_profile、/.bash_login、~/.profile脚本,但是根据@jean Davy的建议创建了一个。你们的回答非常到位。感谢! - Prabhat Kumar Singh

5
你看过你的~/.profile~/.bash_login~/.bash_profile文件了吗?

2
谢谢,完全忘记了。由于Ubuntu不需要设置这些东西,所以我不习惯这样做。 - mauzy_broadway

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接