.bashrc干什么
我们谈论的是Linux系统。Unix类系统也可以参考,但Windows系统就别看了。
如果我们用ls -a
命令查看用户主目录下的文件,我们可以发现有4个带"bash"的文件:
.bashrc
:非登录Session初始化时执行的配置。.bash_profile
:登录Session初始化时执行的配置。.bash_logout
:退出bash shell时运行的脚本。可能为空,也可能有一些内容。.bash_history
:bash输入命令的历史记录。
登录 Session 是用户登录系统以后,系统为用户开启的原始 Session,通常需要用户输入用户名和密码进行登录。
而非登录 Session 是用户进入系统以后,手动新建的 Session,这时不会进行环境初始化。比如,在命令行执行bash命令,就会新建一个非登录 Session。
当然,这里我说的都只是用户的配置文件,在加载用户的配置文件之间会先加载系统的配置文件。
更详细的知识见阮一峰Bash脚本教程
该不该直接改.bashrc
如果要加环境变量,网上一般是让改.bashrc
。为什么?因为在.bash_profile
里一般是引用了.bashrc
的。
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PTAH="$PATH:$HOME/.local/bin:$HOME/bin"
export PATH
这也就带来了一个问题,如果直接改.bashrc
,一旦改出了一些严重的问题,就可能导致无法登录的情况。所以不推荐直接改.bashrc
那么,有没有安全一点的方法?
更安全的方法
当然有,只不过可能有点麻烦。
不去修改.bashrc
,而是把你需要的环境变量什么的写到一个新的文件里。每次需要运行的时候,source
你新写的那个文件。
比如我需要加一些环境变量。那么我把环境变量写到一个叫作.mybashrc
的全新的文件里。然后每次我登录的时候,就执行:
source .mybashrc
最安全,因为根本没有改.bashrc
、.bash_profile
。而且如果你改的环境变量有问题,退出之后重新登录就好了。
只不过有点麻烦,因为每次登录都需要source
一下。
鱼和熊掌不可兼得,要安全只能牺牲方便。
牺牲一小点安全的折中方法
注:对有一定能力的人:
有一个折中的方法,就是在.bash_profile
里加入判断逻辑,每次登录时选择一下是否运行.bashrc
。比如在.bash_profile
末尾加入这些指令:
read -t 10 -p "10秒倒计时,是否载入.bashrc? [Y/n]: " var
var=${var:-"yes"}
if [[ ${var,,} == "yes" || ${var,,} == "y" ]]; then
echo -e "载入中"
source ~/.bashrc
else
echo -e "取消载入"
fi
这样如果出问题,就有更改的余地。
tmux
默认开启的是登录shell (login shell) ,可以通过在.tmux.conf
文件里加入这条设置来改变:
set -g default-command bash
# 或者这条:
set-option -g default-shell bash
(但你这不是需要改.bash_profile
文件吗?
(所以这段只针对有一定能力的人