bashrcまたはbash_profileから変数のロードが機能しません。

bashrcまたはbash_profileから変数のロードが機能しません。

スクリプトが対話型モードで実行されていることを確認するためのいくつかのロジックを持つスクリプトがあります。 bashrcとbash_profileには、私がエクスポートしたのと同じ環境変数が含まれています。スクリプトのif / thenステートメントとCaseステートメントで使用されているので、インタラクティブにまたはcronを介してスクリプトを実行するときにロードしたいと思います。

if [[ $- == *i* ]]; then
   source ~/.bash_profile
else
   source ~/.bashrc
fi

ところで、対話型でテストしてみると、この条件が機能せず、「else」条件が使用されるようです。 bashrcのロジックは、スクリプトが対話型で実行されていることを検出するため、変数をロードしません。このファイルのしくみを真剣に誤解していますか?

ベストアンサー1

これは便利です。

#!/bin/bash
if [[ $- == *i* ]]; then
#   source ~/.bash_profile
   echo 'this script is interactive; $- is equal to *i*'
else
#   source ~/.bashrc
echo 'this script is not interactive; $- is NOT equal to *i*'
fi

elseスクリプトはデフォルトでサブシェルで実行されるため、出力は常に条件付きです。以下を少し変更してスクリプトを対話的に実行できますshebang

から: #!/bin/bash

到着する: #!/bin/bash -i

おすすめ記事