.bash_profile
.bashrc
Bashでは、ログインシェルによって実行されるものとすべてのシェルによって実行されるものは本質的に分離されています。今私理解する非シェルプロセスでログインではなくインタラクティブシェルを実行するのは非常に一般的です.bashrc
。どちらも実行していません.bashrc
。だから私は.bashrc
何らかの意味で「トップレベル」インタラクティブシェルでのみ発生するように私が実行するいくつかのタスクを何とか制限したいと思います。
これを行う方法についてはいくつかのルールがありますか?それとも利点に比べて悩みが多すぎるのでしょうか?
答え1
インタラクティブであるかどうか、既存のプロセスで新しいbashプロセスが作成された場合、目的の操作は.bashrcが(完全に)再インポートされるのを防ぐようです。
次のことができます。
Hello, I am a "first" shell
$ cat .bashrc
[ -n "$SPAWNING" ] && return
export SPAWNING=yes
echo 'Hello, I am a "first" shell'
$ bash
$
exit
$ env -i bash
Hello, I am a "first" shell
$ exit
$
前述のように、すべての環境変数が消去されたときに新しいbashが作成されても役に立たないことを覚えておくことは依然として重要です。
答え2
「$-」変数には、呼び出されると現在のシェルのオプションが含まれます。対話型シェルを表す「i」があることがわかります。
case "$-" in
*i*) echo in interactive shell
# do interactive-only setup here
;;
esac