XNUMX つの予期しない Bash 変数

についての一連のメモの続き あまり知られていない 機能 bash について、あなたが知らないかもしれない XNUMX つの変数を紹介します。

1) PROMPT_COMMAND

プロンプトを操作してさまざまな有用な情報を表示する方法はすでに知っているかもしれませんが、プロンプトが表示されるたびにシェル コマンドを実行できることは誰もが知っているわけではありません。

実際、多くの複雑なプロンプト マニピュレータは、この変数を使用してコマンドを実行し、プロンプトに表示される情報を収集します。

これを新しいシェルで実行して、セッションに何が起こるかを確認してください。

$ PROMPT_COMMAND='echo -n "writing the prompt at " && date'

2) HISTTIMEFORMAT

走れば history コンソールには、自分のアカウントで以前に実行されたコマンドのリストが表示されます。

$ HISTTIMEFORMAT='I ran this at: %d/%m/%y %T '

この変数が設定されると、新しいエントリはコマンドとともに時間を記録するため、出力は次のようになります。

1871 これを実行した場所: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 これを実行した場所: 01/05/19 13:38:19curl bbc.co.uk 1873 これを実行した場所: 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 これを実行したのは次のとおりです: 01/05/19 13:39:18curl -vvv bbc.co.uk 1876 これを実行したのは次のとおりです: 01 /05/19 13:39:25 須藤す -

書式設定は次の文字と一致します man date.

3) CDPATH

コマンドラインでの時間を節約するために、この変数を使用すると、コマンドを発行するのと同じくらい簡単にディレクトリを変更できます。

のような PATH、 変数 CDPATH コロンで区切られたパスのリストです。 コマンドを実行すると cd 相対パスを使用する場合 (つまり、先頭にスラッシュがない場合)、デフォルトでは、シェルはローカル フォルダー内で一致する名前を探します。 CDPATH は、指定したパス内で移動先のディレクトリを検索します。

インストールする場合 CDPATH このように:

$ CDPATH=/:/lib

そして次のように入力します。

$ cd /home
$ cd tmp

そうすれば、あなたはいつも次のような状態になるでしょう /tmp どこにいても。

ただし、リストにローカルのものを指定しないと (.) フォルダーを作成すると、他のフォルダーを作成できなくなります tmp そしていつものようにそこに行きます:

$ cd /home
$ mkdir tmp
$ cd tmp
$ pwd
/tmp

おっと!

これは、ローカル フォルダーがよく知られた変数に含まれていないことに気づいたときに感じた混乱に似ています。 PATH...ただし、ダウンロードしたコードから偽のコマンドを実行するようにだまされる可能性があるため、PATH 変数でこれを行う必要があります。

私のものは開始点によって設定されています。

CDPATH=.:/space:/etc:/var/lib:/usr/share:/opt

4) SHLVL

タイピング中に疑問に思ったことはありますか exit 現在の bash シェルから別の「親」シェルに移動しますか、それともコンソール ウィンドウを完全に閉じるだけですか?

この変数は、bash シェル内でどれだけ深くネストされているかを追跡します。 新しいターミナルを作成すると、1 に設定されます。

$ echo $SHLVL
1

次に、別のシェル プロセスを開始すると、数値が増加します。

$ bash
$ echo $SHLVL
2

これは、終了するかどうかわからないスクリプトや、どこにネストされているかを追跡する場合に非常に役立ちます。

5) LINENO

この変数は、現在の状態の分析やデバッグにも役立ちます。 LINENOこれは、これまでにセッションで実行されたコマンドの数を報告します。

$ bash
$ echo $LINENO
1
$ echo $LINENO
2

これは、スクリプトをデバッグするときに最もよく使用されます。 のような行を挿入すると、 echo DEBUG:$LINENOを使用すると、スクリプト内のどこにいるのか (またはそうでないのか) をすぐに判断できます。

6) REPLY

私と同じように、あなたが通常次のようなコードを書く場合:

$ read input
echo do something with $input

変数の作成についてまったく心配する必要がないことに驚くかもしれません。

$ read
echo do something with $REPLY

これも同じことです。

7) TMOUT

セキュリティ上の理由で運用サーバーに長時間留まりすぎたり、誤って間違った端末で危険なものを実行したりすることを避けるために、この変数を設定すると保護として機能します。

設定された秒数が経過しても何も入力されない場合、シェルは終了します。

つまり、これは代替品です sleep 1 && exit:

$ TMOUT=1

出所: habr.com

コメントを追加します