Bashコマンドはスクリプトでは実行されませんが、端末に入力すると機能します。

Bashコマンドはスクリプトでは実行されませんが、端末に入力すると機能します。

非常に単純なスクリプトに奇妙な問題があります。ライブラリにLD_LIBRARY_PATHを設定しています。端末にこのコマンドを入力すると:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/some/path
echo $LD_LIBRARY_PATH

出力は、echoリンカーパスが正しく追加されたことを示しています。しかし、まったく同じコマンドを.shファイルに入れると、次のようになります。

#!bin/bash
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/some/path

echo実行後、リンカパスが追加されていないと出力に表示されます。スクリプトは実行可能ファイルに設定され、正しいディレクトリで実行されます。誰が何が間違っているのか教えてもらえますか?ありがとうございます!

ベストアンサー1

子シェル(スクリプト)は親シェルから変数を継承できますが、その逆は不可能です。

つまり、使用しているシェルの変数をそのシェルで実行されているスクリプトに渡すことができます。ただし、スクリプトに設定された変数は、スクリプトを実行するシェルには影響しません。

ただし、スクリプトの変数は、スクリプト用に開かれたシェルでのみ設定されます。たとえば、「echo $LD_LIBRARY_PATH」行をスクリプトに追加すると、期待した結果が得られます。

毎回動作するシェルの変数を設定するには、その変数を.bashrcファイル(またはOSXの場合は.bash_profile)に入れます。

おすすめ記事