Должно быть, я что-то упускаю, но я попробовал несколько способов заставить это работать.

Я работаю на суперкомпьютере без прав администратора. Мне нужно использовать конкретную версию Java для конкретной программы, но я не хочу делать это Java по умолчанию для всего.

Предпринятые шаги: я скачал соответствующий jre и добавил следующие строки в начале моего сценария:

export PATH="/path/to/jre/bin/:$PATH"
export JAVA_HOME="/path/to/jre"
echo $PATH
echo ""
echo $JAVA_HOME

Я получаю соответствующие пути, когда я эхо во время сценария, и, как и ожидалось, $ PATH и $ JAVA_HOME возвращаются к исходным значениям после завершения сценария. Проблема в том, что программы, вызываемые во время сценария, не используют Java, в котором они мне нужны (и, следовательно, приводят к сбою в неверной версии Java). Если я запускаю те же команды экспорта в оболочке перед запуском сценария, программы запускаются, как и ожидалось.

У меня также нет контроля над тем, как вызывается Java, потому что я использую программу (PBcR), которая вызывает ряд других программ. Вот единственный вызов в моем скрипте:

/path/to/bin/PBcR \
-length 500 \
-partitions 200 \
-l lambda \
-s pacbio.spec \
-fastq pacbio.filtered_subreads.fastq \
genomeSize=50000

Вопросы:

  1. Почему не все программы, работающие во время скрипта, используют $ PATH и $ JAVA_HOME, которые я экспортирую во время скрипта?
  2. Как я могу заставить все программы, вызываемые во время сценария, использовать правильные переменные среды?

Я также попытался поместить команды export в отдельный файл и вызвать source для этого файла, но, похоже, это ничего не меняет.

Я действительно ценю твою помощь.

Работает на CentOS 6.6; оболочка bash;

2 ответа2

0

Оказалось глупой ошибкой. Я устанавливал свои $ PATH и $ JAVA_HOME, используя ~ а не полный путь (например, ~/path/to/java вместо /path/to/java как я поставил в своем первоначальном вопросе). Я, очевидно, упустил из виду эту "мелкую" деталь при публикации моего первоначального вопроса

Пытаясь отладить это, я узнал, что "программа", вызывающая java, на самом деле была скриптом perl, и perl не разрешает ~ как это делает bash .

Я ценю вашу помощь.

0

Я не уверен, почему они не работают, но вот как файл jar запланирован на одном из моих серверов:

/path/to/jre/bin/java -jar yourjavaprogram.jar

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .