为什么我的 mac 终端命令在 shell 脚本中不起作用?

为什么我的 mac 终端命令在 shell 脚本中不起作用?

我安装了 fico xpress 的 Linux 版本,它使用 mosel 作为其二进制可执行文件。我可以从任何目录调用 mosel 并执行 .mos 模型(以及参数传递),如下所示:

mosel -c "exec PATH/TO/MODEL arg1='value1', arg2='value2'"

以退出代码 0 结束。

但是,当我将与上面相同的文本放入 run.sh 文件中并且:

sh run.sh

我得到:

dyld: Library not loaded: libxprm_mc.dylib
Referenced from: /usr/local/opt/xpress/bin/mosel
Reason: image not found
run.sh: line 4: 22768 Trace/BPT trap: 5       mosel -c "exec PATH/TO/MODEL arg1='value1', arg2='value2'"

我已经搜索了 dylib 文件,但它不存在(据我所知)。编辑:我在中找到了 dylib 文件/usr/local/opt/xpress/lib 另外值得注意的是,为了从命令行运行 mosel,我还必须在中设置以下内容/etc/launchd.conf

setenv XPRESSDIR /usr/local/opt/xpress
setenv PATH $XPRESSDIR/bin:$PATH
setenv LD_LIBRARY_PATH $XPRESSDIR/lib:$LD_LIBRARY_PATH
setenv CLASSPATH $XPRESSDIR/lib/xprs.jar:$CLASSPATH 
setenv CLASSPATH $XPRESSDIR/lib/xprb.jar:$CLASSPATH 
setenv CLASSPATH $XPRESSDIR/lib/xprm.jar:$XLASSPATH 
setenv XPRESS $XPRESSDIR/bin

为什么我从 shell 脚本中收到此错误,而不是在终端中执行同一行时收到此错误?

答案1

在您的脚本中尝试使用以下路径导出DYLD_LIBRARY_PATH环境变量dylib

export DYLD_LIBRARY_PATH=/usr/local/opt/xpress/bin/lib:${DYLD_LIBRARY_PATH}
mosel -c "exec PATH/TO/MODEL arg1='value1', arg2='value2'"

这应该让 mosel 可执行文件知道动态库的位置。

相关内容