.bashrcでbashスクリプトを実行する

.bashrcでbashスクリプトを実行する

こんにちは、bash rcでbashスクリプトを実行できるかどうか疑問に思います。新しいシェルを起動しないように指示する方法がない場合は、無限ループを生成するようです。

これは例です

bash_script.sh:

#!/bin/bash
echo Hello World

.bashrc

export HELLO_WORLD=$(bash_script.sh)    

答え1

スクリプトは非対話型シェルによって実行され、.bashrc対話型シェルによってのみ自動的に取得されます。


しかし、無限ループをトリガーする方法があります。すべて bash対話式であるかどうかにかかわらず、シェルは変数が設定されてBASH_ENVいることを確認し、設定されている場合はその値をソースファイル名として使用します。この場合、bashこのファイルでスクリプトを実行すると無限ループが発生するため、次のアクションを実行する必要があります。ただし、実際にはこのスクリプト(名前が示すように)はランダムなコードを実行するのではなく、シェルで使用する環境変数を設定するためにのみ使用されます。

答え2

まあ、私はこれを行う方法を見つけました。 .bashrcで次のことを行います。

export HELLO_WORLD=$(source bash_script.sh)

答え3

あなたが取るべき措置はありません。単にbashスクリプトを実行しても、あなたのスクリプトが.bashrc呼び出されるわけではありません。

.bashrcあなたのウィルはbashがインタラクティブであるときにのみ呼び出されます。スクリプトを起動すると、スクリプトは対話型ではありません。

Bashのマニュアルページから:

対話型シェルは、オプションではなく引数を取らず、-cオプションなしで標準入力とエラーが端末に接続されているシェル(isatty(3)によって決定されます)、または-iオプションで始まるシェルです。 bashが対話型の場合、PS1が設定され、$ -にiが含まれているため、シェルスクリプトまたは起動ファイルがこの状態をテストできます。

ここで重要なのは、「非オプション引数なしで実行」です。スクリプトを起動すると、bashの最初の引数はスクリプトパスです。したがって、オプションではなくパラメータを持ち、対話型ではありません。

答え4

この行を1にします。

[ -z "$PS1" ] && return # If not interactive, exit

関連情報