Linux

為什麼我的 mac 終端命令在 shell 腳本中不起作用?

  • January 6, 2017

我已經安裝了一個 linux 版本的 fico xpress,它使用 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 腳本中得到這個錯誤,而不是在終端中執行同一行?

在您的腳本中嘗試使用路徑導出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 執行檔知道動態庫的位置。

引用自:https://unix.stackexchange.com/questions/335220