Linux 脚本命令解释无法远程工作

Linux 脚本命令解释无法远程工作

我有以下 Linux 脚本(简化):

RUN_JAVA=$(which java)
if [ -z $RUN_JAVA ]
then
 echo "No Java found!" >> /tmp/output.txt
else
 echo $RUN_JAVA >> /tmp/output.txt
fi

当我在同一主机上运行它时,运行完美,输出到文件:

在 /usr/java/默认/bin/java

但是当我从另一台主机运行它时:

ssh ${user}@${hotname} "/tmp/testRemote.sh"

那么它就无法在该主机上找到 Java 安装:

未找到 Java!

可能是什么原因?

答案1

which不检查任何潜在位置,仅限 中的位置$PATH

$PATH并且在远程主机上设置的Java 中没有找到。

原因是ssh user@host command不会创造登录会话,但互动环节并且 bash(可能还有其他 shell)将根据会话类型获取不同的文件来设置您的环境。

请参阅 bash 手册的 INVOCATION 部分以了解确切的区别,但可能您/usr/java/default/bin/在 PATH 中添加的~/.bash_profile内容 ssh user@host command不会加载该文件而仅用于 ~/.bashrc设置环境。

相关内容