今回は軽めのネタでいきましょう。Bashなどのシェルではプロンプトで表示されるを変更することができます。デフォルトのプロンプトで表示される文字列では物足りない、不便だと思う人はいるでしょう。なお、今回はサンプルファイルや必要とするディレクトリはありません。プロンプトで表示される文字列を変更しても設定を保存しなければ、やりたい放題なので気軽に試してみるとしましょう。
Bashのプロンプト
プロンプトで表示される文字列とはシェルで表示される「bash-3.2$」とか「PS /Users/weed>」とかの部分を示します。今回はこの文字列を変更しようということです。長いので以後、プロンプトとして進めます。
まず、最もメジャーなBashからやってみましょう。Bashのプロンプトで何を表示するかはPS1の変数に入っています。PS1の内容を確認するにはechoを使うと確認できます。
echo "$PS1"
設定されている文字列は「\s-\v\$」のようです。この文字列はBashのリファレンスマニュアルに記載されています。
Bash Reference Manual https://www.gnu.org/software/bash/manual/bash.html
BashにはPS1以外にもPS0,PS2,PS3,PS4があります。これもマニュアルに記載があります。
プロンプトで表示される文字列に何が設定できるかはマニュアルに記載があります。
6.9 Controlling the Prompt
https://www.gnu.org/software/bash/manual/html_node/Controlling-the-Prompt.html
これらの文字列をPS1などに指定すればプロンプトを自由に変更できます。
それでは早速プロンプトを変更してみましょう。まず、何も文字列を指定しないとどうなるかやってみます。空文字は""をPS1に入れます。
PS1=""
実行してみると何もプロンプトが表示されなくなりました。コマンドを入力すると機能しているので、画面を広く使いたい場合にはよいかもしれません。
任意の文字列にしたい場合はPS1に好きな文字列を入れます。
PS1="mynavi>"
環境にもよりますが、日本語のプロンプトにすることもできます。
PS1="〆切まであと7日>"
これも環境によりますが、プロンプトを絵文字にすることもできます。使用している書体(フォント)によっては絵文字は表示されないことがあります。使用しているターミナルが対応していない場合は何も表示されなかったり?などの代替記号が表示されることがあります。
PS1="😀"
空文字だと以後の説明画面がわかりにくいので、一旦デフォルトに戻します。デフォルトのプロンプトに戻すには以下のように設定します。
PS1="\s-\v\$ "
プロンプトに日付を表示する
次にプロンプトに現在の日付や時間を表示してみます。ただ、この日付や時間はリアルタイムに更新されるわけではなく、リターンキーを押して次に表示されるプロンプト時点での日付・時間になります。
まず、日付を表示するには\dをPS1に設定します。
PS1="\d "
日付は表示されましたが、環境依存(ロケール依存)みたいで日本語日付だとなかなか微妙な部分もありそうです。とはいえ、ここであきらめるのもしっくりこないので西暦年数、月、日の順番で日付を表示してみましょう。この場合は以下のようにします。
PS1="\D{%F} "
ここで\D{〜}の〜には日付フォーマット文字列を指定します。これはstrftime(3)の文字列で検索すると色々出てきます。
manpages.org strftime(3) https://ja.manpages.org/strftime/3
これらの文字列を設定すれば自由な日付フォーマットで表示できます。xxxx年xx月xx日の形式で表示したい場合は以下のようにします。これで一応期待通りというか見慣れた日本語の日付表示になりました。
PS1="\D{%Y年%m月%d日} "