私はローカルに構築されたオープンソースソフトウェアを使用しています。ビルド後のマニュアルは、次のようにビルドディレクトリで実行するように指示します。
$ LD_LIBRARY_PATH=../applicationExeFile
これにより、アプリケーションが正常に実行されます。
それでは、あまり入力せずにすばやく呼び出すことができる単純なシェル(run.sh)を作成しようとしています。内容は次のとおりです。
#!/bin/bash
export -n LD_LIBRARY_PATH=.
./applicationExeFile
ただし、同じフォルダにライブラリが見つからないアプリケーション実行可能ファイルのエラーが発生したため、LD_LIBRARY_PATHがシェルに登録されていないようです。
./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
プロセスが節約され、信号処理と終了ステータスの報告がより安定して行われます。