Bashプロンプトでシェル変数PS1-PS4をカスタマイズする方法

シェルコマンドを使用すると、Linuxの本当の美しさを見ることができます。 デフォルトでは、シェルプロンプトはホスト名と作業ディレクトリを表示します。 変数を使用して、コマンドプロンプトの色、表示、日時、ユーザー名などを変更できます。PS1変数内でシェルスクリプトを実行することもできます。PSはプロンプトステートメントを表します。 変数PS1を使用してLinux環境を変更する例をいくつか示します。

関連記事: LinuxでカラフルなBashシェルプロンプトを変更する方法

異なるシェル変数の表示

  • PS1:デフォルトのプロンプトの値を含む環境変数。 シェルコマンドプロンプトの外観と環境を変更します。
  • PS2:コマンド継続の解釈に使用されるプロンプトの値を含む環境変数。 多くの行に長いコマンドを書くと、それがわかります。
  • PS3:シェルスクリプト内のselect演算子のプロンプトの値を含む環境変数。
  • PS4:実行中にスクリプト行を表示するために使用されるプロンプトの値を含む環境変数 bash デバッグモードのスクリプト。

この記事では、 エコー コマンドを使用して、コンソールに別のプロンプトの値を表示します。

1)変更する bash プロンプトPS1

PS1 コンソールにログインするたびに表示されるデフォルトのプロンプトです。 ほとんどのニュースLinuxシステムの場合、デフォルト値は u @ h: w $ を表示します ユーザー名、ホスト名、現在の作業ディレクトリ そしてその ユーザー権限。 これらは、取ることができるさまざまな値の単なる例です。 後で表示される他の値がいくつかあります。 ターミナルのPS1プロンプトのデフォルト値を見てみましょう

# echo $PS1 
[e]0;u@h: wa]${debian_chroot:+($debian_chroot)}u@h:w$

含む部品 debian_chroot ルート変更環境で操作している場合は、プロンプトが変更されて通知されることを示します。 プロンプトの残りの部分についての完全なアイデアを得るには、以下を参照してください。
オプション:
a ASCIIベル文字( 007と入力することもできます)
d 「SatSep04」形式の日付
e ASCIIエスケープ文字( 033と入力することもできます)
h ホスト名の最初の部分(「mybox」など)
H 完全なホスト名(「mybox.mydomain.com」など)
j ^ Zを押してこのシェルで中断したプロセスの数
l シェルの端末デバイスの名前(「ttyp4」など)
n 改行
r キャリッジリターン
s シェル実行可能ファイルの名前(「bash」)
t 24時間形式の時間(「23:59:59」など)
T 12時間形式の時間(「11:59:59」など)
@ 午前/午後の12時間形式の時間
u ユーザー名
v のバージョン bash (2.04など)
V パッチレベルを含むBashバージョン
w 現在の作業ディレクトリ(「/ home / koithara」など)
W 現在の作業ディレクトリの「ベース名」(「koithara」など)
! 履歴バッファ内の現在のコマンドの位置
# コマンド番号(何かを入力する限り、これは各プロンプトでカウントアップされます)
$ ルートでない場合は、「$」を挿入します。 ルートの場合、「#」が表示されます
xxx 3桁の数字xxxに基づいてASCII文字を挿入します(未使用の数字を「 007」などのゼロに置き換えます)
バックスラッシュ
[ This sequence should appear before a sequence of characters that don’t move the cursor (like color escape sequences). This allows bash to calculate word wrapping correctly.
] このシーケンスは、印刷されない文字のシーケンスの後に表示されます。

いくつかの例を実行しますが、これらの変数の値を操作する前に、すべてを含むファイルを保存する必要があります。 間違えた場合や、ログアウトして再度ログインしなくても、元のプロンプトに簡単に戻すことができます。

$ cp ~/.bashrc ~/.bashrc-backup

例1:ユーザー名とホスト名のみを区切り文字「-」で表示します。

user01@server01:~$ export PS1="u - h$ "
user01 - server01$ echo $PS1
u - h$

コンソールで変更をすぐに確認できます。 等号の後に二重引用符を使用することに注意してください(“”)を使用するには u h 値。 別の注釈を使用する場合、シェルは等号の後のすべてを値と見なし、結果は得られません。

例2: ユーザー名とホスト名を表示しているときにエラーをシミュレートします。 ^ それ以外の 「」

user01@server01:~$ export PS1=^u - h$ ^
^u - h$ ^$ echo $PS1 
^u - h$ ^

例3: PS1変数に文字列を渡す

user01@sever01:~$ export PS1=happy-test$
happy-test$

例4: プロンプトに時間を追加します t およびとの作業ディレクトリ w

user01 - server01$ export PS1="[t] u@h:w$ "
[21:38:51] user01@server01:~$

例5: プロンプトを複数の行に分割します n 長いコマンドの場合

user01@server01:~$ export PS1="[t]nu@h:w$ "
[21:44:46]
user01@server01:~$

2)を変更します bash プロンプトPS2

コンソールを使用しているときは、1つのコマンドに多くのコマンドを関連付ける必要があります。 コマンドが1行に対して長すぎるため、「各行の終わりに」。 デフォルトのインタラクティブ PS2 複数行コマンドの値プロンプトは「>>「これは、2行目以降にコマンドを続行できることを示します。

$ echo $PS2
>

例1:PS2のデフォルトの使用法

# apt-get update && 
> apt-get -y install mysql-client python-setuptools curl git unzip apache2 php && 
> apt-get upgrade

例2: 値を文に置き換えます。 最後の引用符の前のエスケープに注意してください

# export PS2=”incomplete? continue here-> ”
# apt-get update && 
incomplete? continue here-> apt-get -y install curl git unzip apache2 && 
incomplete? continue here-> apt-get upgrade

3)を変更します bash プロンプトPS3

PS3 によって使用されます 選択する 内部の演算子 bash 脚本。 単純なコンソールでその価値を実現することは困難です。 私たちが話していることを示すために、私たちは簡単なものを書く必要があります bash 値を確認するのに役立つスクリプト。 デフォルト PS3 値のプロンプトは「#?「「

例1: 以下の内容をps3-value.shという名前のファイルにコピーします

#!/bin/bash
echo "please select a value to display a month on the list below"
select i in jan feb mar apr exit
do
    case $i in
       jan) echo "January";;
       feb) echo "February";;
       mar) echo "March";;
       exit) exit;;
    esac
done

例2: PS3の値を表示するためのスクリプトのテスト

$ chmod +x ps3-value.sh
:~$./ps3-value.sh
1) jan
2) feb
3) mar
4) exit
#? 2
February
#?

ご了承ください “#?」はPS3の値です

例3: デフォルト値を「choice」に変更し、スクリプトを実行して表示します

$ export PS3="choice: "
$./ps3-value.sh
Select a value to display a month on the below
1) jan
2) feb
3) mar
4) exit
choice: 2
February
choice:

それを参照してください 選択 私たちの新しい価値です

4)を変更します bash プロンプトPS4

The PS4 の各行を示しています bash 行を実行する前にデバッグモードになっているときのスクリプト。 どの行が結果に参加しないかを知るのに役立ちます。 PS4の値はechoコマンドで表示できます。 しかし、 bash スクリプト、を使用してそれを見ることができます bash -バツ 実行のため。 デフォルト PS4 値のプロンプトは「+「「

例1: ps3-value.shと同じ内容のファイルps4-value.shを作成し、デフォルト値を変更します

$ echo $PS4
+
$ export PS4="[script line->:] "
$ chmod +x ps4-value.sh
$ bash -x ps4-value.sh 
[script line->: ]echo 'Please select a value to display a month on the list below'
Please select a value to display a month on the list below
[script line->: ]select i in jan feb mar apr bye
1) jan
2) feb
3) mar
4) apr
5) bye
#? 3
[script line->: ]case $i in
[script line->: ]echo March
March
#? 1
[script line->: ]case $i in
[script line->: ]echo January
January

変更を永続的にするには

再起動時にPS1を永続化するには、変数を含むexportコマンドを.bash_profileファイルに追加する必要があります。

$cat .bash_profile
export PS1="[d][t][u@h]"

次に、デフォルトの.bash_profileファイルをロードします

$ . .bash_profile

結論

今、あなたは別の役割を知っています bash プロンプトとそれぞれを変更する方法。 変更する前にファイルを保存することが重要であり、間違いが発生した場合はファイルを復元できる必要があります。