Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 我能用我的电脑';m(p)ssh';在某些情况下,ing将显示不同于原始$PATH的路径?_Unix_Ssh_Path_Remote Access - Fatal编程技术网

Unix 我能用我的电脑';m(p)ssh';在某些情况下,ing将显示不同于原始$PATH的路径?

Unix 我能用我的电脑';m(p)ssh';在某些情况下,ing将显示不同于原始$PATH的路径?,unix,ssh,path,remote-access,Unix,Ssh,Path,Remote Access,我正在使用这个名为ssh的工具将多个主机连接在一起 使用它的语法是: pssh [OPTIONS] command [...] 例如: pssh -h hosts.txt uptime 这里hosts.txt是包含我所有主机的ip地址的文件。 上面提到的命令工作得很好。即使我用ls替换正常运行时间,它也可以正常工作,并向我显示相应机器上所有文件的正确内容 问题是,如果我将该命令替换为echo$PATH,那么它将显示我的路径 如果我使用此命令: pssh -h ips.txt which ja

我正在使用这个名为ssh的工具将多个主机连接在一起

使用它的语法是:

pssh [OPTIONS] command [...]
例如:

pssh -h hosts.txt uptime
这里hosts.txt是包含我所有主机的ip地址的文件。 上面提到的命令工作得很好。即使我用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并配置了正确的路径。有人能告诉我为什么不能让这个命令在所有主机上运行吗?

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

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

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