如何设置$ PATH,以便`ssh user @ host command`工作?
我似乎无法设置一个新的$ 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 / games)。 远程机器正在运行Ubuntu 8.04。
我敢肯定,我可以入侵到/ etc / profile,但这不是一个干净的解决scheme,只有在有root权限的情况下才能使用。
正如Grawity所说,〜/ .bashrc是你想要的,因为它是由非交互式非loginshell产生的。
我希望你遇到的问题与默认的Ubuntu〜/ .bashrc文件有关。 它通常从这样的事情开始:
# If not running interactively, don't do anything [ -z "$PS1" ] && return
您希望在此行之前放置任何非交互式shell。
你有~/.bash_login
或~/.bash_profile
吗?
Bash以交互模式检查这些文件,并按照以下顺序使用第一个现有文件:
-
~/.bash_profile
-
~/.bash_login
-
~/.profile
所以如果你有一个~/.bash_profile
,那么你对~/.profile
做的任何修改都将被忽略。
Bash在非交互模式下有时会读取~/.bashrc
文件(通常也是交互式脚本中的源文件)。“有时候”我的意思是说它是依赖于分配的:非常奇怪的是,编译时选项来启用它。 Debian启用~/.bashrc
读取,而Arch则不启用。
ssh
似乎在使用非交互模式, 所以~/.bashrc
应该就够了。 遇到这样的问题时,我通常会添加一些echo来查看正在运行的文件。
ssh文档说:
如果指定了命令,它将在远程主机上执行,而不是在loginshell中执行。
这就是为什么添加到bashrc文件不起作用。 你确实有以下select:
-
如果在sshdconfiguration中设置了
PermitUserEnvironment
选项,则可以将PATH设置添加到~/.ssh/environment
-
ssh remotemachine 'bash -l -c "somecommand"'
你总是可以说:
ssh remotemachine 'export PATH=wedontneedastinkingpath; echo $PATH'
除了@signpolyma答案,您将不得不在这些行之前添加您的导出
# If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac
我自己也有同样的问题,解决它:
ssh user@remotehost PATH=\$HOME/bin:\$PATH\; remote-command