2

ソフトウェアを構成して起動するスクリプトを作成しています。現在のアプリケーションでは、LD_LIBRARY_PATH に追加する必要があります。これが最初に空かどうかをテストし、それを完全に設定して、それ以外の場合は追加できることを知っています。

以下は機能していないようで、ケースステートメントでテストしている文字列が含まれていても、変数に追加し続けます。

mysetup.sh

export AXIS2C_HOME=/home/ojblass/Source/axis2c-src-1.6.0
if [ "$LD_LIBRARY_PATH" == "" ]; then
   echo empty setting
   export LD_LIBRARY_PATH=${AXIS2C_HOME}/lib
else
   case $LD_LIB_PATH in
   *$AXIS2C_HOME/lib* )
       echo already there skipping;;
   * )
       echo has entries but appending
       export LD_LIBRARY_PATH=${AXIS2C_HOME}/lib:${LD_LIBRARY_PATH};;
   esac
fi
echo AXIS2C_HOME=${AXIS2C_HOME}
echo LD_LIBRARY_PATH=${LD_LIBRARY_PATH}

Example_Run

ojblass@helium:~/Source/axis2c-src-1.6.0$ pwd
/home/ojblass/Source/axis2c-src-1.6.0
ojblass@helium:~/Source/axis2c-src-1.6.0$ . ./mysetup.sh
空の設定
AXIS2C_HOME=/home/ojblass/Source/axis2c-src-1.6.0
LD_LIBRARY_PATH=/home/ojblass/Source/axis2c-src-1.6.0/lib
ojblass@helium:~/Source/axis2c-src-1.6.0$ . ./mysetup.sh
エントリがありますが、追加されています
AXIS2C_HOME=/home/ojblass/Source/axis2c-src-1.6.0
LD_LIBRARY_PATH=/home/ojblass/Source/axis2c-src-1.6.0/lib:/home/ojblass/Source/axis2c-src-1.6.0/lib

お気づきのとおり、LD_LIBRARY_PATH が追加され続けています。また、私はシェル固有であり、私が望むほど移植性がないことを少し恐れています。アドバイスをいただければ幸いです。

4

1 に答える 1

2

上記のコードをコピーして貼り付ければ、答えは簡単です。

LD_LIBRARY_PATH一貫して綴る

( の発生LD_LIB_PATHは、おそらくあなたが考えていたものではありません。)

以下を使用してテストした場合:

sh -x mysetup.sh
(. ./mysetup.sh; sh -x mysetup.sh)
(unset LD_LIBRARY_PATH; sh -x mysetup.sh)

$AXIS2C_HOME/lib最初のコマンドで追加され、2 番目のコマンド シーケンスで 2 回追加されておらず、3 番目のコマンド シーケンスで設定されていることがわかりました。

別のメカニズムは、 How to keep from duplicate path variable in cshclnpathに記載されているようなスクリプト、またはそこにある他の回答の1つを使用することです。基本的に、パスのような変数を分析し、重複が含まれていないことを確認します。

于 2009-07-02T06:07:10.190 に答える