当我通过ssh连接到运行Hardy 8.04的ubuntu-box时,我的.bashrc
中的环境变量没有设置。
如果我执行source .bashrc
,则变量被正确设置,一切正常。
.bashrc为什么不在登录时运行?
使用 SSH 登录时,.bashrc
不会被自动加载。您需要在 .bash_profile
中像这样手动加载:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
.bashrc
文件了 - 但是它是从.profile
而不是.bash_profile
中读取的。 - underscore_d. ~/.bashrc
而不是source ~/.bashrc
? - PlasmaBinturong我有类似于Hobhouse的情况。我想使用命令
ssh myhost.com 'some_command'
在/var/some_location
中存在some_command
。
我尝试通过编辑$HOME/.bashrc
将/var/some_location
添加到PATH环境变量中,但这并没有起作用。因为默认情况下,在Ubuntu 10.4 LTS上,.bashrc
会由于以下代码而提前退出:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
如果你想要改变ssh非登录shell的环境,你需要在该行代码上方添加代码。
# 如果不是交互式运行,则不执行任何操作
case $- in
*i*) ;;
*) return;;
esac
- Sylvainman ssh
: "如果指定了命令,则在远程主机上执行该命令,而不是登录shell。" 对于我在Fedora Core 29上运行命令时(并且没有命令调用),它既不调用.bashrc
也不调用.bash_profile
。 - Yaroslav Nikitenko如果你想了解bash调用的工作原理、每个dotfile的作用,以及如何使用/配置它们,请阅读以下优秀资源:
.profile
而非 .bash_profile
。这对我起了作用。.profile
。您的评论完全与问题和答案相矛盾,这些答案明确表明 .profile
在 SSH 登录时被调用 - 这是一种明显非 GUI 的方法。 - underscore_d和 @Loïc Wolff 类似,我在我的 $HOME/.bash_profile
中添加了以下内容 Ubuntu 16
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
echo "Executed .bash_profile , calling .bashrc"
. "$HOME/.bashrc"
fi
fi
.bashrc
和.bash_profile
之间的区别! - information_interchange