当我 ssh 进入运行 Hardy 8.04 的 ubuntu-box 时,我的 .bashrc
中的环境变量没有设置。
如果我做一个源.bashrc
,变量设置正确,一切都很好。
为什么 .bashrc
没有在登录时运行?
.bashrc
和 .bash_profile
之间的实际区别!
当您使用 SSH 登录时,.bashrc
不是来源。您需要像这样在 .bash_profile
中获取它:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
我也有类似 Hobhouse 的情况。我想使用命令
ssh myhost.com 'some_command'
其中 some_command
存在于 /var/some_location
中。
我试图通过编辑 $HOME/.bashrc
将 /var/some_location
附加到 PATH 环境变量,但这不起作用。因为默认情况下,.bashrc
(在 Ubuntu 10.4 LTS 上)由于这段代码而提前退出:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
这意味着如果您想更改 ssh 非登录 shell 的环境,您应该在该行上方添加代码。
bash # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac
man ssh
:“如果指定了命令,它将在远程主机而不是登录 shell 上执行。”对于 Fedora Core 29 上的我来说,它在运行命令时既不调用 .bashrc 也不调用 .bash_profile (并且在没有命令的情况下调用它们)。
有关 bash 调用如何工作、点文件做什么以及应该如何使用/配置它们的优秀资源,请阅读以下内容:
点文件
如果 ayman 的解决方案不起作用,请尝试将您的文件命名为 .profile
而不是 .bash_profile
。这对我有用。
.profile
将由 any 登录 shell 执行,无论所述 shell 是否打算生成 GUI。您的评论与问题和这个答案完全矛盾,这清楚地表明 .profile
是在 SSH 中调用的 - 一种明显的非 GUI 方法。
类似于 @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
。.bashrc
- 但它来自.profile
,而不是.bash_profile
。