我使用本地构建的开源软件。构建后,手册说在构建目录中像这样运行它
$ LD_LIBRARY_PATH=../applicationExeFile
然后应用程序运行良好。
现在我尝试制作一个简单的 shell 来快速调用,而无需输入太多内容(run.sh),内容如下:
#!/bin/bash
export -n LD_LIBRARY_PATH=.
./applicationExeFile
但似乎 LD_LIBRARY_PATH 没有在 shell 中注册,因为我收到有关应用程序可执行文件找不到同一文件夹中的库的错误
./applicationExeFile: error while loading shared libraries: libchart.so: cannot open shared object file: No such file or directory
我做错了什么以及如何实现这一目标?
答案1
-n
第一个问题实际上是联合国导出变量,但不导出它。看help export
:
export: export [-fn] [name[=value] ...] or export -p
Set export attribute for shell variables.
Marks each NAME for automatic export to the environment of subsequently
executed commands. If VALUE is supplied, assign VALUE before exporting.
Options:
-f refer to shell functions
-n remove the export property from each NAME
-p display a list of all exported variables and functions
An argument of `--' disables further option processing.
Exit Status:
Returns success unless an invalid option is given or NAME is invalid.
接下来,.
指的是进程的当前工作目录。这意味着您的脚本仍然需要从安装程序的特定目录运行,这似乎有点毫无意义。只需使用完整路径即可。如果您的程序位于/home/dekker/myprogram
,请使您的脚本如下所示:
#!/bin/bash
export LD_LIBRARY_PATH=/home/dekker/myprogram
/home/dekker/myprogram/applicationExeFile
要不就:
#! /bin/sh -
LD_LIBRARY_PATH=/home/dekker/myprogram exec /home/dekker/myprogram/applicationExeFile
因为没有什么bash
具体的内容,并且您不需要单独的export
声明。使用exec
还可以节省流程并使信号处理和退出状态报告更加可靠。