開発中に環境変数を維持するためにプロジェクトでラッパースクリプトを使用することがよくあります。
shell.sh
:
#!/bin/bash
export PATH=$PWD/bin:$PATH
export USERNAME=foo
export PASSWORD=bar
export DB_SERVER=http://localhost:6001
bash
これでプロジェクト環境が確立され、対話型bashセッションが開始されます。この例はシェルスクリプトですが、実際には次の構成内でこれを最も頻繁に実行します。ファイルレシピの作成、それが重要な場合。
問題は、これらのセッションに参加すると、プロジェクト環境外のセッションと視覚的に区別するのが難しいことが多いことです。誤ってこれらのスクリプトを複数回実行して、複数レベルのネストされたbashセッション内で実行することもできます。
bash
私は、bashサブセッションにあるのか、それとも親bashセッションにいるのかを簡単に知るために、呼び出し回数を示すいくつかの値をコマンドプロンプトに表示する方法があることを望みました。
ここにリストされているいくつかのbash変数が表示されます。 https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Variables
特にBASH_SUBSHELL
サブシェルのレベルを計算する関数がありますが、これは実際にはサブシェルではないため、この目的には使用できません。
$ (echo $BASH_SUBSHELL)
1
$ (echo $BASH_SUBSHELL; bash)
1
$ echo $BASH_SUBSHELL
0
このカウンターを維持する他の方法はありますか?その場合は、bashプロンプトに何かを簡単に追加して、端末にこれをより明確に表示できます。
以下は、上記のスクリプトを使用したコメントに基づいてさまざまな方法を比較したものです。
# inside top-level parent session
$ echo $$ $BASHPID $BASH_SUBSHELL $SHLVL
32336 32336 0 1
# invoke the script to enter a new bash session
$ ./test.sh
$ echo $$ $BASHPID $BASH_SUBSHELL $SHLVL
39541 39541 0 3
$BASH_SUBSHELL
新しいシェルレベルを反映しません。