非交互式的 shell 如何使 .bashrc 生效呢?
在 Ubuntu 服务器上,当你通过 SSH 登录时,默认情况下 .bashrc 文件会在每次启动交互式 shell 时自动加载。但是,如果你是在启动服务或者以非交互方式运行命令,例如使用 ssh user@server command 这种方式。那么 .bashrc 不会自动加载,因为在这种情况下启动的是非交互式的 shell。

- 显式加载
.bashrc
在脚本或命令中明确指定加载 .bashrc 文件,这样,即使是非交互式的环境,也会加载 .bashrc 的配置。
#!/bin/bash
source ~/.bashrc
- 修改
.bash_profile或.bash_login
非交互式 Shell 会优先加载 ~/.bash_profile 或 ~/.bash_login 文件(如果存在)。可以在这些文件中加入以下代码,使其加载 .bashrc。
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
- 通过
BASH_ENV环境变量加载
BASH_ENV 是一个专门用于非交互式 Shell 的环境变量,可以指定一个文件,在每次运行非交互式 Shell 时加载该文件。
export BASH_ENV=~/.bashrc
- 直接在脚本中引入所需配置
如果你只需要部分 .bashrc 的内容,可以直接将相关配置写入脚本,避免加载整个 .bashrc 文件。
# 脚本中仅加载 PATH 和别名
export PATH="$HOME/bin:$PATH"
alias ll='ls -l'
- 使用 .bashrc 文件的注意事项
$ cat ~/.bashrc
# 原代码: 限制为交互式shell
[ -z "$PS1" ] && return