プロンプトの設定

Yash のプロンプトには、PS1、PS2、PS4 の三種類があります。PS1 は対話モードでコマンドを入力するときのプロンプト、つまり yash を使うとき一番よく目にするプロンプトです。PS2 は 2 行以上の長いコマンドを入力するとき、PS1 の代わりに使われます。PS4 は xtrace オプションを使ってトレースを出力するときに使われるものです。

PS1 プロンプトは、PS1、PS1S、PS1R の三つの変数を使って設定します。PS1 変数はメインのプロンプトの内容と書式を設定します。PS1S 変数は入力するコマンドの書式を設定します。PS1R 変数は右プロンプトの内容と書式を設定します。PS2 プロンプトも同様に PS2、PS2S、PS2R の三つの変数を使って設定します。PS4 プロンプトは PS4 と PS4S の二つの変数で設定します (PS4 では右プロンプトはないので PS4R は使いません)。

パラメータ展開

これらの変数の内容はプロンプトを表示する際に毎回パラメータ展開されます。例えば以下のように設定するとプロンプトに作業ディレクトリパスを表示できます。(PWD 変数には作業ディレクトリパスが常に入っています)

PS1='$PWD > '

ここで引用符として ' を使っていることに注意してください。

PS1="$PWD > "
とすると、プロンプトを表示するときではなく .yashrc 内で PS1 変数を設定するときに PWD 変数が展開されてしまいます。

その他の設定例:

  • ユーザ名を表示する
    PS1='$LOGNAME > '
    
  • ホスト名を表示する
    HOSTNAME=$(uname -n)
    PS1='$HOSTNAME > '
    
  • ホスト名の、最初のドットより前の部分だけ表示する
    HOSTNAME=$(uname -n)
    PS1='${HOSTNAME%%.*} > '
    
  • 作業ディレクトリのベース名だけを表示する
    PS1='${${PWD##*/}:-$PWD} > '
    
    ${PWD##*/} だけだとルートディレクトリで何も表示されなくなってしまう。
  • 作業ディレクトリを表示するとき、ホームディレクトリを ~ と表示する
    PS1='${${PWD:/$HOME/\~}/#$HOME\//\~\/} > '
    
    ${PWD/#$HOME/\~} だと、例えばホームディレクトリが /home/foobar で作業ディレクトリが /home/foo のとき表示がおかしくなる
  • 作業ディレクトリのベース名だけを表示、ただしホームディレクトリは ~ と表示する
    PS1='${${${PWD:/$HOME/\~}##*/}:-$PWD} > '
    
  • これらの組み合わせ
    PS1='$LOGNAME@${HOSTNAME%%.*} ${${${PWD:/$HOME/\~}##*/}:-$PWD} > '
    

バックスラッシュ記法

パラメータ展開の後は、以下のようなバックスラッシュ記法が解釈されます。

\a ベル
\e エスケープ
\j シェルのジョブ数
\n 改行
\r キャリッジリターン
\! 次のコマンドの履歴番号
\$ root なら #、それ以外のユーザなら $
\\ バックスラッシュ
\f フォントの書式設定

設定例:

PS1='$LOGNAME@$HOSTNAME $PWD\n\! \$ '

\f を使った書式設定は、特殊な書き方になっています。\f の直後に、下の表にある書式設定文字を書き、そのあとにピリオド (.) を置きます。\f からピリオドまでが一つのバックスラッシュ記法になります。このバックスラッシュ記法自体は画面上に表示されませんが、この記法の後に来る文字の書式が変わります。

k 文字を黒に
r 文字を赤に
g 文字を緑に
y 文字を黄に
b 文字を青に
m 文字をマゼンタ (赤紫) に
c 文字をシアン (水色) に
w 文字を白に
kt 文字を明るい黒に
rt 文字を明るい赤に
gt 文字を明るい緑に
yt 文字を明るい黄に
bt 文字を明るい青に
mt 文字を明るいマゼンタ (赤紫) に
ct 文字を明るいシアン (水色) に
wt 文字を明るい白に
K 背景を黒に
R 背景を赤に
G 背景を緑に
Y 背景を黄に
B 背景を青に
M 背景をマゼンタ (赤紫) に
C 背景をシアン (水色) に
W 背景を白に
Kt 背景を明るい黒に
Rt 背景を明るい赤に
Gt 背景を明るい緑に
Yt 背景を明るい黄に
Bt 背景を明るい青に
Mt 背景を明るいマゼンタ (赤紫) に
Ct 背景を明るいシアン (水色) に
Wt 背景を明るい白に
d 文字と背景を普通の色に
s 文字を目立たせる (普通は太字になる)
u 下線
v 色を反転
b 点滅
i 文字の色を暗く
o 太字
x 文字を見えなくする
D 全部標準に戻す

ホスト名を赤、作業ディレクトリを下線付き青にする設定例:

PS1='\fr.$HOSTNAME \fbu.$PWD\fD. \$ '

使える色や書式は、使っている端末の種類や設定によって変わります。全ての端末で上の全ての色・書式が使えるわけではありません。

右プロンプト

右プロンプトは行の右端に表示されるプロンプトです。PS1R, PS2R 変数を使って設定します。設定の書き方は PS1 変数と同じです。

スタイラープロンプト

スタイラープロンプトは入力したコマンドが画面に表示されるときの書式を設定するためだけに存在するプロンプトです。PS1S, PS2S, PS4S 変数を使って設定します。このプロンプトの設定には、\f バックスラッシュ記法によるフォントの書式設定しか書けません。

入力したコマンドを下線付きで表示する設定例:

PS1S='\fu.'