我似乎无法设置新的$ PATH,以便在通过ssh user@host command
执行命令时使用它。我尝试在远程计算机上添加export PATH=$PATH:$HOME/new_path
到〜/ .bashrc和〜/ .profile,但执行ssh user@host "echo \$PATH"
表示没有获取更改(显示/ usr / local / sbin:在/ usr / local / bin目录:/ usr / sbin目录:在/ usr / bin中:/ sbin目录:/ bin中:在/ usr /游戏)。远程计算机正在运行Ubuntu 8.04。
我确信我可以将其破解到/ etc / profile中,但这不是一个干净的解决方案,只有在拥有root权限时才有效。
答案 0 :(得分:169)
正如grawity所说,〜/ .bashrc是你想要的,因为它是由非交互式非登录shell提供的。
我希望您遇到的问题与默认的Ubuntu~ / .bashrc文件有关。它通常以这样的东西开头:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
您希望在此行之前为非交互式shell 添加任何内容。
答案 1 :(得分:29)
您有~/.bash_login
还是~/.bash_profile
?
以交互模式进行Bash检查这些文件,并按此顺序使用第一个现有文件:
~/.bash_profile
~/.bash_login
~/.profile
因此,如果您有~/.bash_profile
,那么您对~/.profile
所做的任何更改都将保持不变。
非交互式模式下的Bash 有时会读取文件~/.bashrc
(这也常常来自交互式脚本。)“有时”我的意思是它是分发 - 依赖:很奇怪,有一个编译时选项来启用它。 Debian支持~/.bashrc
阅读,例如Arch没有。
ssh
似乎正在使用非交互模式,所以 ~/.bashrc
就足够了。遇到这样的问题时,我通常会添加一些echo来查看正在运行的文件。
答案 2 :(得分:20)
ssh文档说:
如果指定了command,则在远程主机上执行,而不是登录shell。
这就是为什么添加到bashrc文件不起作用。但是你有以下选择:
如果在sshd配置中设置了PermitUserEnvironment
选项,则可以将PATH设置添加到~/.ssh/environment
ssh remotemachine 'bash -l -c "somecommand"'
答案 3 :(得分:6)
你总是可以说:
ssh remotemachine 'export PATH=wedontneedastinkingpath; echo $PATH'
答案 4 :(得分:2)
我自己也遇到了同样的问题,解决了它:
ssh user@remotehost PATH=\$HOME/bin:\$PATH\; remote-command
答案 5 :(得分:2)
除@signpolyma答案外,您还必须在这些行之前添加导出
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac