bash - 如果运行命令行但不是从 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 文件),那么为什么它会在脚本中失败?
解决方案
感谢 franzik 和其他人的评论,因此导出 JAVA_HOME 存在问题,我在脚本中添加了以下内容以使其正常工作。
export JAVA_HOME=/path/to/jvm/
推荐阅读
- python - 从 VGG16 模型到 Mobilenet 再到 android studio
- javascript - Redux 过滤数组
- python - 在 Django 中将多个模型(mysql)组合到模板中
- javascript - 如何突出显示 chartjs 中的特定数据点,我的数据来自 json 数组?
- react-native - 如何集成 squareup 支付方式以在 react-native 应用程序中获取 nonce?
- python - Python 生成器:如何根据用户输入从两个不同的列表中生成对(要打印多少对)
- python - 动态更改烧瓶中_table_args_中的模式名称
- javascript - Vuejs 中的 $vm.user 和 $vm.$data.user 有什么区别?
- python - 如何使用 MultiIndex 索引和 MultiIndex 列对 Pandas DataFrame 进行切片?
- c# - 使用动态 IP 进行套接字编程