首页 > 解决方案 > 如果运行命令行但不是从 shell 脚本运行,命令运行良好

问题描述

我在切换的新服务器上遇到了一个奇怪的问题(从 ubuntu 18_04 切换到 Red hat linux)。我们的一个脚本开始抛出错误,但如果我将相同的命令复制粘贴到命令 shell 上,它就可以正常工作。

Shell 是 bash,命令是

g++ -Wall -fPIC  -I $JAVA_HOME/include -I $JAVA_HOME/include/linux -shared -o Test.so Test.cpp

因此,如果手动运行它可以正常工作,但在任何脚本中运行时都会引发以下错误。

In file included from Test.cpp:2:
Test.h:2:10: fatal error: jni.h: No such file or directory
 #include <jni.h>
          ^~~~~~~
compilation terminated.

我尝试以所有可能的形式运行脚本,删除了所有其他命令,但这个命令甚至这个最简单的脚本都抛出了与我在上面发布的相同的错误;测试.sh

#!/bin/bash
g++ -Wall -fPIC  -I $JAVA_HOME/include -I $JAVA_HOME/include/linux -shared -o Test.so Test.cpp

所以我的问题是,如果命令在命令提示符/bash 上运行没有任何问题(它确实找到了 JAVA_HOME 的所有路径,找到 jni.h 并生成 .so 文件),那么为什么它会在脚本中失败?

标签: bashg++redhat

解决方案


感谢 franzik 和其他人的评论,因此导出 JAVA_HOME 存在问题,我在脚本中添加了以下内容以使其正常工作。

export JAVA_HOME=/path/to/jvm/

推荐阅读