关于unix:如何设置$ PATH使`ssh user @ host command`有效?

How do I set $PATH such that `ssh user@host command` works?

我似乎无法设置一个新的$ PATH,以便在通过ssh user@host command执行命令时使用它。 我尝试在远程机器上将export PATH=$PATH:$HOME/new_path添加到?/ .bashrc和?/ .profile,但是执行ssh user@host"echo \$PATH"表示没有获取更改(它显示/ usr / local / sbin:/ usr / local/斌:/ usr / sbin目录:在/ usr/ bin中:/ sbin目录:/ bin中:在/ usr/游戏)。 远程计算机正在运行Ubuntu 8.04。

我确信我可以将其破解到/ etc / profile中,但这不是一个干净的解决方案,只有在具有root访问权限时才有效。


正如grawity所说,?/ .bashrc就是你想要的,因为它是由非交互式非登录shell提供的。

我希望你遇到的问题与默认的Ubuntu~ / .bashrc文件有关。它通常以这样的东西开头:

1
2
# 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读取,例如拱门没有。

    ssh似乎使用非交互模式,所以~/.bashrc应该足够了。遇到这样的问题时,我通常会添加一些echo来查看正在运行的文件。


    ssh文档说:

    If command is specified, it is executed on the remote host instead of a login shell.

    这就是为什么添加到bashrc文件不起作用。但是你有以下选择:

  • 如果在sshd配置中设置了PermitUserEnvironment选项,则可以将PATH设置添加到~/.ssh/environment

  • ssh remotemachine 'bash -l -c"somecommand"'


  • 你总是可以说:

    1
    ssh remotemachine 'export PATH=wedontneedastinkingpath; echo $PATH'


    除@signpolyma答案外,您还必须在这些行之前添加导出

    1
    2
    3
    4
    5
    # If not running interactively, don't do anything
    case $- in
        *i*) ;;
          *) return;;
    esac


    我自己也遇到了同样的问题,用以下方法解决了:

    1
    ssh user@remotehost PATH=\$HOME/bin:\$PATH\; remote-command