安全外壳无法正确加载 .bashrc

安全外壳无法正确加载 .bashrc

我有一个看似简单的问题 - 我有一个通过 连接的 15.04 服务器。目前,我在文件中的环境变量ssh中添加了几个文件夹:PATH.bashrc

#... (rest of .bashrc)

export PATH=$PATH:/home/athan/bin

这允许foo命令可见。当我使用 secure-shell直接地进入服务器,我可以foo正常使用:

athan@mine $> ssh [email protected]
athan@place $> foo
foo!

但是,当我尝试执行命令时远程foo无处可寻:

athan@mine $> ssh [email protected] "foo"
bash: foo: command not found

更奇怪的是,当我明确source我的.bashrc,它仍然找不到:

athan@mine $> ssh [email protected] 'bash -lc "source /home/athan/.bashrc && foo"'
bash: foo: command not found

远程过程调用是否sshd具有不同的环境行为?是否有我应该查看的单独文件?我不知道还有什么问题。

答案1

通常,.bashrc它仅用于交互式 shell,但许多 Linux 发行版决定使用特殊选项构建 bash,以便在环境中存在 SSH_something 变量时,也可以将其用于非交互式 shell。但是,执行此操作时不会将 shell 切换到交互模式,因此case默认顶部附近的以下命令.bashrc

case $- in
    *i*) ;;
      *) return;;
esac

发现shell不是交互式的,所以返回。

如果你将PATH任务放在该块上方,它应该可以工作。只需确保你放在该块上方的任何内容都不会输出任何内容,因为那样会scp破坏rsync

相关内容