顔文字インジケータ付き 便利なbashプロンプト

Linux Tech

皆さんこんにちは、超脳香望です。
普段お使いのbashプロンプト、どのようにしていますか。
環境変数PS1を様々に設定してカスタマイズできますが、この度僕がやってみたカスタマイズがなかなかいい感じでしたのでご紹介いたします。

こんな感じ

プロンプトの先頭に、(o_o) (+_+) (x_x)の顔文字が現れています。
kompotaというホスト名は、自宅で試験運用中のファイルサーバ(Intel NUC5)の名前です。

直前のコマンドの実行結果により顔文字が変化

bashでは、特殊変数「$?」に直前に実行したコマンドの終了コードが格納されます。
一般的なコマンドは、正常終了したときに0、そうでないときに1、何らかのエラーがあればそれ以外の数値を返します。
この値を拾って、顔文字を変化させています。

0のとき (o_o)
1のとき (+_+)
2のとき (x_x) に続いて終了コード

この判定を.bashrcの中に書いて、出力すべき顔文字を変数exitstatusに入れています。

色物プロンプト

顔文字のあとのプロンプトにはANSIエスケープシーケンスをつけて色物にしています。
エスケープシーケンス、ややっこしいですがこういう内容になっています。

PS1='$(exitstatus)\e[32m[\e[35m\u\e[37m@\e[36m\h:\w\e[32m]\e[36m\$\e[37m[$(tput sgr0)] '

内容は下記のとおりです。

$(exitstatus) ← 先に説明した顔文字の部分 これ自体にエスケープシーケンスが含まれているのでここでは指定しない
\e[32m ← エスケープシーケンス 緑
[ ← 単なる文字
\e[35m ← エスケープシーケンス マゼンタ
\u ← ユーザ名
\e[37m ← エスケープシーケンス 白
@ ← 単なる文字
\e[36m ← エスケープシーケンス シアン
\h ← ホスト名
: ← 単なる文字
\w ← 現在のディレクトリ名
\e[32m ← エスケープシーケンス 緑
] ←単なる文字
\e[36m ← エスケープシーケンス シアン
\$ ← root なら # を表示、それ以外なら $ を表示
[$(tput sgr0)] ← エスケープシーケンスの設定を解除

bash スクリプト

上記内容のスクリプトは下記のとおりです。
この内容を .bashrc に書き込んでください。書き込んだあと、source ~/.bashrc で反映されます。
bash スクリプトを書く経験がほとんどありませんので、素敵なコーディングにはなっていないと思いますが、恥を承知で公開いたします。

# ############## PROMPT CUSTOMIZE KAOMOJI  ############
#  Coded by Chounoukoubou (cnkb.work) 2023
#  Licensed under CC-BY-SA 4.0
# ##################################################

# to show exit code-kaomoji
exitstatus()
{
  case $? in
    0) echo -e '\e[36m(o_o)';;
    1) echo -e '\e[33m(+_+)';;
    *) echo -e '\e[31m(x_x)'$?;;
   esac
}

  export PS1='$(exitstatus)\e[32m[\e[35m\u\e[37m@\e[36m\h:\w\e[32m]\e[36m\$\[$(tput sgr0)\] '

Linux Tech

Posted by 超脳香望