![Linux 脚本命令解释无法远程工作](https://linux22.com/image/714547/Linux%20%E8%84%9A%E6%9C%AC%E5%91%BD%E4%BB%A4%E8%A7%A3%E9%87%8A%E6%97%A0%E6%B3%95%E8%BF%9C%E7%A8%8B%E5%B7%A5%E4%BD%9C.png)
我有以下 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
设置环境。