ssh登录时的.bashrc

Hob*_*use 357 ssh bash ubuntu

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

如果我做一个源.bashrc,变量是正确设置的,一切都很好.

为什么.bashrc不会在登录时运行?

Aym*_*ieh 594

.bashrc使用SSH登录时未获取.你需要.bash_profile像这样来源:

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi
Run Code Online (Sandbox Code Playgroud)

  • 这应该适用于任何使用Bash的理智发行版,因此所有这些评论都已过时:) (32认同)
  • @orokusaki:更正,它是:)有一个流氓.bash_profile文件强制.profile被跳过. (4认同)
  • 就像@LesterPeabody一样,由于流氓.bash_profile,我的.bashrc并没有在Ubuntu 12.04 LTS服务器上获取.它是由RVM安装创建的.我将RVM命令移动到.profile并删除.bash_profile.一切都好了. (4认同)
  • fwiw Debian Jessie/8已经开始提供`.bashrc`开箱即用 - 但是它来自`.profile`,而不是`.bash_profile`. (4认同)
  • 为什么是`. ~/.bashrc` 而不是 `source ~/.bashrc`? (3认同)
  • 一行: `[[ -f ~/.bashrc ]] && 。〜/ .bashrc` (2认同)

rus*_*eel 69

我有像霍布豪斯这样的情况.我想用命令

 ssh myhost.com 'some_command'
Run Code Online (Sandbox Code Playgroud)

并且'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
Run Code Online (Sandbox Code Playgroud)

所以如果你想改变ssh非登录shell的环境.你应该在该行之上添加代码.

  • 谢了哥们!这对我来说不起作用:) (7认同)
  • 在其他版本的 Ubuntu 上,交互式检查看起来像: ```bash # 如果不是交互式运行,不要做任何事情 case $- in *i*) ;; *) 返回;; esac``` (3认同)

lhu*_*ath 31

有关bash调用如何工作的优秀资源,什么dotfiles做什么,以及如何使用/配置它们,请阅读:


Loï*_*lff 28

如果ayman的解决方案不起作用,请尝试命名您的文件.profile而不是.bash_profile.这对我有用.

  • 惊人的。我在这个细节上浪费了 15 分钟。 (2认同)
  • @RazecLuar `.profile` 将由任何登录 shell 执行,无论所述 shell 是否打算生成 GUI。您的评论与问题和这个答案完全矛盾,这清楚地表明“.profile”是在 SSHing 上调用的 - 一种明显的非 GUI 方法。 (2认同)