3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Bashプロンプト表示の環境変数(PS0,PS1,PS2,PS3,PS4)について

Last updated at Posted at 2024-02-14

Bashプロンプトでは表示をカスタマイズできる環境変数(PS0,PS1,PS2,PS3,PS4)が用意されています。

今回はリファレンスマニュアルを読み、これらを設定するとどのような動作になるか確認してみます。

ドキュメント

Bash Reference Manual - 5 Shell Variables

Bash Reference Manual - 6.3.3 Interactive Shell Behavior

Bash Reference Manual - 6.9 Controlling the Prompt

実行環境

  • WSL2なUbuntu 22.04.3 LTS
  • GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)

PS0,PS1,PS2,PS3,PS4って?

Bashのリファレンスマニュアルに記載があり、それぞれ下記のような記載になっています。

マニュアルを読んでいて気が付きましたが、PS1とPS2はBourne Shell Variablesとして記載されており。
PS0,PS3,PS4はBash Variablesとして記載されていました。

時代を感じます。

PS1

Bash Reference Manual - 6.3.3 Interactive Shell Behavior

5.1 Bourne Shell Variables

コマンドの入力が開始される前に表示されるプライマリプロンプトでデフォルト値は‘\s-\v$ ’のようです。

今回の実行環境では

  • /etc/profile
  • ~/.bashrc

の中でPS1を設定してたためこれらの設定を削除すると下記のようになりました。

image.png

エスケープ文字は下記ドキュメントに記載があり

Bash Reference Manual - 6.9 Controlling the Prompt

  • \sでシェル名の表示
  • \vでBashのバージョン表示

となっています。

PS2

Bash Reference Manual - 5.2 Bash Variables

この環境変数は複数行コマンドを入力する際に、改行した後に設定した値を表示します。

image.png

PS2に">>>>> "という文字列を設定してコマンド入力で改行をしてみると、改行後に">>>>> "が表示されている事がわかります。

PS0

Bash Reference Manual - 5.2 Bash Variables

コマンドが読み込まれた後、コマンドの結果が表示される前に、変数の内容を表示します。

下記の例ではPS0に"foobar "と入力し、echoでhelloworldと表示される前に環境変数PS0に設定したfoobarが表示される例。

image.png

PS3

Bash Reference Manual - 5.2 Bash Variables

PS3はBashのselect組み込みコマンドによってインタラクティブメニューが表示されるときに利用されるプロンプトとなり。

select
select variable in foo bar hello world; do echo $variable; break;done

image.png

上記のようにPS3に"Select! "と設定すると、select組み込みコマンドで選択時にSelect! とコンソールに表示される事がわかります。

PS4

Bash Reference Manual - 5.2 Bash Variables

PS4を設定するとデバッグ時に各コマンドの前に出力されます。
なおPS4のデフォルト値は‘+ ’。

test_ps4.sh
#!/usr/bin/env bash

function fx_foo() {
  echo "foo"
  fx_bar
}

function fx_bar() {
  echo "bar"
}

set -x

fx_foo

上記のようにset -xをつけてスクリプトを実行すると下記のように表示されます。

image.png

上から

1.function名
2.実行したコマンド
3.実行結果
4.function名
5.実行したコマンド
6.実行結果

といった具合に表示されている事がわかります。

またPS4はPS1と同様の記法でカスタマイズできるため、設定すれば色々な情報を表示できるようになります。

総評

何となくで利用していた環境変数について一度ドキュメントを確認してみました。

リファレンスマニュアル読んでて気が付きましたが、PS1とPS2は5.1 Bourne Shell Variablesで説明されていて、PS0とPS3とPS4は5.2 Bash Variablesで説明されているので。

PS1とPS2はBourne Shell時代からある環境変数で、PS0,PS3,PS4はGNUなBashで追加された環境変数って事かと思います。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?