Linux

Linux 腳本命令解釋無法遠端工作

  • December 7, 2017

我有以下 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/default/bin/java

但是當我從另一台主機執行它時:

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

然後在該主機上找不到 Java 安裝:

沒有找到 Java!

可能是什麼原因?

which不檢查任何潛在位置,只檢查$PATH.

$PATH並且在遠端主機上設置的那個中找不到 Java 。

原因是它ssh user@host command不會創建登錄會話,但互動式會話和 bash(可能還有其他 shell)會根據會話類型獲取不同的文件來設置您的環境。

有關確切差異,請參閱 bash 手冊的 INVOCATION 部分,但可能您/usr/java/default/bin/在 PATH 中添加了一個~/.bash_profile不會 ssh user@host command載入該文件而僅用於 ~/.bashrc設置環境的地方。

引用自:https://serverfault.com/questions/887075