我有一个看似简单的问题 - 我有一个通过 连接的 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
。