【问题标题】:Can the computer that I'm (p)ssh'ing into be showing different than the original $PATH under certain circumstances?在某些情况下,我正在 (p)ssh'ing 进入的计算机是否可以显示与原始 $PATH 不同?
【发布时间】:2013-06-17 17:20:11
【问题描述】:

我正在使用这个名为 pssh 的工具来一起 ssh 到多个主机

使用它的语法是:

pssh [OPTIONS] command [...]

例如:

pssh -h hosts.txt uptime

这里的 hosts.txt 是包含我所有主机的 IP 地址的文件。 上面提到的命令工作得很好。即使我将 uptime 替换为 ls ,它也可以正常工作并向我显示相应机器上所有文件的正确内容。

问题是,如果我用 echo $PATH 替换该命令,那么它会显示我的路径

如果我使用这个命令:

pssh -h ips.txt which java

然后对于所有主机,它都会向我显示此错误:

which: no java in (/usr/local/bin:/bin:/usr/bin)

如果我使用普通的 ssh 命令手动 ssh 到其中一个主机 ()

然后我执行 which 命令或查看 $PATH 变量,然后看到这个:

-bash-3.2$ echo $PATH
/home/xx/bin64:/home/xx/bin:/usr/kerberos/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin
-bash-3.2$ which java
/home/xx/bin/java
-bash-3.2$ 

所以这表明至少有一台机器安装了 java 并且配置了正确的路径。那么有人能告诉我为什么我不能让这个命令适用于所有主机吗?

【问题讨论】:

    标签: unix ssh path remote-access


    【解决方案1】:

    您要连接的服务器可能会设置不同的$PATH,具体取决于远程运行的shell 是登录shell 还是交互式shell。当您以交互方式 ssh 时,会在服务器上调用一个交互式登录 shell。当您以非交互方式 ssh 时,将调用非交互、非登录 shell(使用 -c 选项直接运行指定命令而不进入交互模式)。

    许多 shell 提供不同的启动文件,具体取决于它们是作为登录 shell 和/或交互式 shell 调用的。例如,bash 仅在它是登录 shell 时读取~/.profile(或变体),而仅当它是一个 intractive shell 时读取~/.bashrc。服务器可能会设置一个 $PATH,其中包含来自这些启动文件之一的 Java 目录。

    解决方案是从/etc/environment 设置环境变量,如$PATH,而不是从shell 启动文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 2015-07-22
      • 1970-01-01
      • 2018-08-13
      相关资源
      最近更新 更多