在脚本开头设置环境变量(例如,$PATH)——不适用于所有程序

在脚本开头设置环境变量(例如,$PATH)——不适用于所有程序

我肯定忽略了一些东西,但我已经尝试了几种方法来让它发挥作用。

我在一台没有管理员权限的超级计算机上工作。我需要为某个程序使用特定的 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

问题:

  1. 为什么脚本期间运行的所有程序都不使用我在脚本期间导出的 $PATH 和 $JAVA_HOME?
  2. 如何让脚本中调用的所有程序使用正确的环境变量?

我也尝试过将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预期的那样进行解析。

我感谢您的帮助。

相关内容