Linux – bash のプロンプト表示を変更する方法 (PS1, PS2 変数)

目次

概要

シェルのプロンプトの表示や動作を制御するために使用されるシェル変数 PS1, PS2, PS3, PS4 について解説します。 プロンプトとは、ユーザーにコマンドの入力を促す記号や文字列です。

PS1, PS2, PS3, PS4 変数

Bash において、PS から始まる変数はシェルのプロンプトの表示を制御するために使用されます。 以下のようにして、現在の変数の値を確認できます。

echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
ubuntu@ubuntu-PC:~$ echo $PS2
>
ubuntu@ubuntu-PC:~$ echo $PS3

ubuntu@ubuntu-PC:~$ echo $PS4
+
ubuntu@ubuntu-PC:~$

$PS1: プライマリプロンプト

$PS1はプライマリプロンプトのフォーマットを指定します。 プライマリプロンプトとは、コマンドを入力する前に表示されるプロンプトです。

例:

PS1="\u@\h:\w\$ "
  • \u: 現在のユーザー名
  • \h: ホスト名
  • \w: 現在の作業ディレクトリ
  • \$: スーパーユーザーなら#、それ以外なら$

デフォルトでは、一般的に次のように表示されます。

user@hostname:~/current_directory$

$PS2: セカンダリプロンプト

$PS2はセカンダリプロンプトのフォーマットを指定します。 プライマリプロンプトとは、コマンドが複数行にわたる場合に表示されるプロンプトです。

例:

PS2="> "

デフォルトでは次のように表示されます。

mv aaa \
> bbb \
>

$PS3

$PS3select コマンドのプロンプトを指定します。selectコマンドを使う際に表示されます。

PS3="選択してください: "

確認のため、以下のスクリプトを select.sh と保存して実行します。

#!/bin/bash

PS3="選択肢を選んでください: "
options=("オプション1" "オプション2" "オプション3" "終了")

# selectコマンドを使用して選択肢を表示
select opt in "${options[@]}"
do
    case $opt in
        "オプション1")
            echo "オプション1が選ばれました"
            break
            ;;
        "オプション2")
            echo "オプション2が選ばれました"
            break
            ;;
        "オプション3")
            echo "オプション3が選ばれました"
            break
            ;;
        "終了")
            echo "終了します"
            break
            ;;
        *) echo "無効な選択です";;
    esac
done
$ ./select.sh
1) オプション1
2) オプション2
3) オプション3
4) 終了
選択肢を選んでください: 1
オプション1が選ばれました

$PS4

$PS4set -x を使ってスクリプトのデバッグを行う際に表示されるプロンプトのフォーマットを指定します。

例:

PS4="+ "

確認のため、以下のスクリプトを setx.sh と保存して実行します。

$ ./setx.sh
+ echo 'This is a sample script with debugging enabled'
This is a sample script with debugging enabled
+ pwd
/home/ubuntu/notebook/pystyle.info/Linux/linux-ps1-variable
+ set +x
Debugging has been disabled
/home/ubuntu/notebook/pystyle.info/Linux/linux-ps1-variable

プロンプトのカスタマイズ

カスタマイズする対象は主にプライマリプロンプトの PS1 になります。 以下は、シェルのプロンプトで使用できるエスケープシーケンスの一覧を整理したものです。 これらのエスケープシーケンスを使って、シェルのプロンプトを柔軟にカスタマイズすることができます。

日時

エスケープシーケンス 説明
\d 日付 火 1 月 28
\D{format} 日付 (strftime(3) の書式)。空のフォーマットはロケール固有の時間表現を挿入。中括弧が必要。 10 時 56 分 13 秒
\t 24 時間形式の時刻(HH:MM:SS)。 19:57:52
\T 12 時間形式の時刻(HH:MM:SS)。 07:57:56
\@ 12 時間 am/pm 形式の時刻。 07:58 午後
\A 24 時間形式の時刻(HH:MM フォーマット)。 19:58

※ ロケールが ja_JP.UTF-8 の場合

特殊文字

エスケープシーケンス 説明
\a ベル文字
\e エスケープ文字
\n 改行
\r キャリッジリターン
\nnn ASCII コードが 8 進数の値 nnn に対応する文字。
\\ バックスラッシュ。

変数

エスケープシーケンス 説明
\h ホスト名(最初の ‘.’ まで) myhost
\H ホスト名 myhost.example.com
\j シェルが現在管理しているジョブの数 2
\l シェルの端末デバイス名のベース名 tty1
\s シェルの名前 bash
\u 現在のユーザー名 nekobean
\v Bash のバージョン 5.1
\V Bash のバージョン + パッチレベル 5.1.8
\w $PWD シェル変数の値($PROMPT_DIRTRIM 変数を使用) ~/projects
\W $PWDのベース名 projects
\! このコマンドの履歴番号 123
\# このコマンドのコマンド番号 456
\$ ユーザー ID が 0 (root) なら#、それ以外の場合は $ $
\[ 非表示文字列の開始 (プロンプトにターミナル制御シーケンスを埋め込むために使用) \[
\] 非表示文字列の終了 \]

参考

コメント

コメントする

目次