У меня есть приведенный ниже сценарий 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 не найдена!
Что может быть причиной?
which
не проверяет любой потенциальное местоположение, только местоположения в $PATH
.
И Java не встречается в $PATH
который устанавливается на удаленном хосте.
Причина в том, что ssh user@host command
не создает сеанс входа в систему, но интерактивная сессия и bash (и, возможно, другие оболочки тоже) будут исходить из разных файлов для настройки вашей среды в зависимости от типа сеанса.
См. Раздел «ВЫЗОВ» в руководстве по bash, чтобы узнать о точных различиях, но, возможно, вы добавите /usr/java/default/bin/
к вашему PATH в ~/.bash_profile
где ssh user@host command
не загружает этот файл и использует только ~/.bashrc
настроить среду.