以前コマンドラインのプロンプトを変更する回がありました。
第77回「プロンプトで表示される文字列を変更する」
https://news.mynavi.jp/techplus/article/natonakucommand-77/
これはBashのプロンプトを変更するものでした。ほとんどの場合、Bashで事足りるはずですが、そうでない環境もあります。例えばmacOSです。現在のmacOSではデフォルトのシェルはzshとなっています。以前はBashでした。その前はtcshで結構デフォルトシェルが変わっています。
今回はmacOSのデフォルトのシェルであるzshのプロンプトを変更してみましょう。
zshのプロンプト
プロンプトの説明などは以前やりましたので、そちらを参照(第2回 ディレクトリ移動 )してください。まず、zshのプロンプトを変更してみましょう。zshのプロンプトはPROMPTに表示したい文字列を設定します。以下のようにするとプロンプトがxyzに変わります。
PROMPT='xyz'
プロンプトを日本語にすることもできます。
PROMPT='締め切りまであと3日:'
変更したプロンプトをデフォルトに戻しておきましょう。以下のようにコマンドを入力します。
exec zsh
現在、どのようなプロンプト設定になっているかは以下のようにコマンドを入力します。
echo $PROMPT
zshもBashと同様に変数PS1に設定することでプロンプトを変更することもできます。Bash同様にPS2,PS3,PS4もあります。
PS1='Apple>'
zshで設定できるプロンプト
zshで設定できるプロンプトに関しては以下のページに記載されています。
Z shell(https://zsh.sourceforge.io/)
https://zsh.sourceforge.io/Doc/Release/Prompt-Expansion.html
かなり設定できる項目がたくさんありますので、以後はよく使いそうなものだけをピックアップして設定してみましょう。
プロンプトに日時を表示する
それではプロンプトに現在の日付や時間を表示してみましょう。この日付や時間はリアルタイムに更新されるわけではなく、リターンキーを押して次に表示されるプロンプト時点での日付・時間になります。
まず、日付を表示するにはPROMPTに%Dを設定します。
PROMPT='%D'
年月日を別々に表示処理したい場合は以下のように指定します。%Yが西暦4桁の年数、%mが月、%dが日を示します。
PROMPT='%D{%Y年%m月%d日}'
時間を表示するには%Tを設定します。
PROMPT='%T'
秒数も表示したい場合は%*を設定します。
PROMPT='%*'
日付と時間を同時に表示したい場合は以下のように、それぞれの文字列を列記して設定します。
PROMPT='%D %*'
時分秒を別々に表示処理したい場合は以下のように指定します。%Kが時間(24時間制)、%Mが分、%Sが秒数を示します。
PROMPT='%D{%K時%M分%S秒}'
プロンプトを右側に表示する
zshはプロンプトを右側に表示することができます。右側に表示するにはRPROMPTコマンドを使います。以下のようにするとmacOSの文字が右側に表示されます。なお、通常のプロンプトは左側に表示されます。
RPROMPT='[macOS]'
右側に日時を表示しておくには以下のように指定します。
RPROMPT='%D{%Y年%m月%d日 %K時%M分%S秒}'
プロンプトにディレクトリ名を表示する
それでは次にプロンプトにディレクトリ名を表示してみます。この場合、以下のように設定します。
PROMPT='%d %# '
ホームディレクトリを~(チルダ)に省略したい場合は以下のように設定します。
PROMPT='%~ %# '
プロンプトに色をつける
それではプロンプトに色をつけてみます。まず、文字色を黄色に変更してみます。文字色は%F{ }で指定します。{ }の中にカラー名やカラーコード(256色)を指定します。%fを指定するとそこで%Fで指定した色が終了します。
【表】カラー名
| black | 黒 |
|---|---|
| red | 赤 |
| green | 緑 |
| yellow | 黄色 |
| blue | 青 |
| magenta | マゼンタ(紫色) |
| cyan | シアン(水色) |
| white | 白 |
PROMPT='%F{yellow}%d %#%f'
PROMPT='%F{yellow}%d%f %F{white} %#%f'
背景色を黄色にするには%Kを使って以下のように指定します。指定方法は文字色の時と同じで%K{ }で指定します。{ }の中にカラー名やカラーコード(256色)を指定します。%kを指定するとそこで%Kで指定した背景色が終了します。
PROMPT='%K{yellow}%d %#%k'
文字色と背景色を同時に指定することもできます。文字色を赤色に、背景色を黄色にするには以下のように指定します。
PROMPT='%F{red}%K{yellow}%d %#%f%k'
プロンプトを太文字にする
プロンプトを太文字にすることもできます。%Bを指定すると太文字になり、%bを指定すると通常の文字の太さに戻ります。
PROMPT='%B{yellow}%d %#%b'
太文字以外では下線(アンダーライン)を指定することもできます。この場合、%Uで下線が追加され、%uで下線が消えます。
PROMPT='%U{yellow}%d %#%u'
Dockerで作業している場合にプロンプトを変更する
最後におまけでDocker内で作業している場合、右側に[DOCKER]と表示するには以下のように指定します。Dockerかどうかの判定はルートディレクトリに.dockerenvファイルがあるかで判断しています。このコンテナにはzshが入っているものとします。コンテナを起動したらコンテナ内でzshのプロンプト設定を行います。
・zshが入っているUbuntuコンテナで実行
docker container exec -it ubuntu-zsh zsh
コンテナ内で設定ファイルに以下のコードを追加します。
if [ -f /.dockerenv ]; then
RPROMPT='%K{red}[DOCKER]%k'
fi
設定を反映させます。これで完了です。
source /root/.zshrc
zshではなくBashの場合も同様にコンテナ内の.bashrcに分かりやすいプロンプトを指定すればOKです。
ということで、また次回。
著者 仲村次郎
いろいろな事に手を出してみたものの結局身につかず、とりあえず目的の事ができればいいんじゃないかみたいな感じで生きております。





























