我肯定忽略了一些东西,但我已经尝试了几种方法来让它发挥作用。
我在一台没有管理员权限的超级计算机上工作。我需要为某个程序使用特定的 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 版本不正确而失败)。如果我在运行脚本之前在 shell 中运行相同的导出命令,程序将按预期运行。
我也无法控制如何调用 java,因为我正在使用一个程序(PBcR
)来调用一系列其他程序。这是我的脚本中唯一的调用:
/path/to/bin/PBcR \
-length 500 \
-partitions 200 \
-l lambda \
-s pacbio.spec \
-fastq pacbio.filtered_subreads.fastq \
genomeSize=50000
问题:
- 为什么脚本期间运行的所有程序都不使用我在脚本期间导出的 $PATH 和 $JAVA_HOME?
- 如何让脚本中调用的所有程序使用正确的环境变量?
我也尝试过将export
命令放在单独的文件中并调用source
该文件,但这似乎没有改变任何东西。
我非常感谢你的帮助。
在 CentOS 6.6 上运行;bash shell;
答案1
我不确定为什么它们不起作用,但这就是我的其中一台服务器上 jar 文件的调度方式:
/path/to/jre/bin/java -jar yourjavaprogram.jar
答案2
后来发现这是一个愚蠢的错误。我设置 $PATH 和 $JAVA_HOME 时使用的是~
完整路径(例如,~/path/to/java
而不是/path/to/java
像我在原始问题中输入的那样)。我在发布原始问题时显然忽略了这个“小”细节。
在尝试调试这个问题时,我发现调用 java 的“程序”实际上是一个 perl 脚本,而 perl 无法~
像bash
预期的那样进行解析。
我感谢您的帮助。