SSH登录时的.bashrc


374

当我进入运行Hardy 8.04的ubuntu-box时,.bashrc未设置环境变量。

如果我执行source .bashrc,则正确设置变量,一切都很好。

怎么会.bashrc不是在登录时运行?


92
这个“离题”到底如何?
约拿书

8
我的要求并不严格,但是我猜这应该属于serverfault.com,superuser.com或askubuntu.com
Michael Butler

16
@MichaelButler同意。不知道他们为什么不动它,而不是仅仅关闭它...
吕克

4
@Luc-问题只能在创建后60天内移动。这个问题直到它被创建三年半之后才被关闭。我相信60天的规则与备份问题数据库有关,或者与之相关...在进行备份后,迁移变得更加困难。
ArtOfWarfare

我认为这是一个非常有用的问题。当我不得不SSH进入机器A以便SSH进入机器B时遇到此问题(只能通过A的本地网络访问)。教给我.bashrc和之间的实际区别.bash_profile
information_interchange

Answers:


620

.bashrc使用SSH登录时未提供来源。您需要这样来获取它.bash_profile

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

32
这应该可以在Bash的任何合理发行版上使用,因此所有这些评论都已过时:)

1
对于Ubuntu 12.04 LTS服务器,这不是必需的,因为.bashrc默认情况下是在您进行SSH登录时提供的。
orokusaki 2012年

4
@orokusaki:更正是:)有一个流氓.bash_profile文件,该文件迫使.profile被跳过。
Lester Peabody

4
像@LesterPeabody一样,由于流氓.bash_profile,我的.bashrc不在Ubuntu 12.04 LTS服务器上提供。它是由RVM安装创建的。我将RVM命令移至.profile并删除.bash_profile。现在一切正常。
Rod Daunoravicius

4
fwiw Debian Jessie / 8已经.bashrc开箱即用,但是它是从而.profile不是.bash_profile
underscore_d

75

我有类似霍布豪斯的情况。我想使用命令

 ssh myhost.com 'some_command'

和“ some_command”存在于“ / var / some_location”中,因此我尝试通过编辑“ $ HOME / .bashrc”在PATH环境中附加“ / var / some_location”

但这是行不通的。因为默认.bashrc(Ubuntu 10.4 LTS)阻止通过如下代码进行采购

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

所以如果要更改ssh非登录shell的环境。您应该在该行上方添加代码。


7
谢了哥们!这一点对我不起作用:)
Raymond Barlow

凉爽的露珠。从jenkins运行脚本时,我遇到了这个陷阱。我已经通过ssh登录并成功了。Jenkins非交互式登录,但失败。
2014年

1
为什么通用解决方案甚至不为非交互式外壳设置新路径,这超出了我的范围。出于这个原因,在if语句之上应该有很多内容。似乎只有别名和交互式工具的初始化应该在该行下……
BenPen

2
在其他版本的Ubuntu上,交互式检查如下:bash # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac
Sylvain

谢谢,这为我解决了。希望我在一小时前见过!
贾斯汀·劳伦斯

31

要获得有关bash调用如何工作,什么dotfile可以做什么以及如何使用/配置它们的出色资源,请阅读以下内容:


关键段落:“使它读取/ etc / profile,然后读取.bash_profile或.bash_login或.profile中的一个。”
安迪·海登

29

如果ayman的解决方案不起作用,请尝试将文件命名.profile.bash_profile。那对我有用。


2
太棒了 我在这个细节上浪费了15分钟。
vmassuchetto 2012年

这在Ubuntu 12.10
ThinkCode 2013年

1
我认为.profile加载GUI登录。.bash_profile,用于终端登录。
Razec Luar 2013年

这也适用于SSH登录Debian Jessie docker容器(使用仅数据容器进行持久存储)-但是,您可能还需要检查/ etc / passwd来检查您的登录shell是/ bin / bash而不是/ bin / sh -------> / bin / dash
Stuart Cardall

1
@RazecLuar .profile将由任何登录shell 执行,无论该shell是否打算生成GUI。您的评论与该问题和答案完全矛盾,这清楚地表明.profile在SSHing in中调用了它- 这是一种明显的非GUI方法。
underscore_d
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.