ターミナルプロンプトを自作するには

ターミナルのプロンプトを自分仕様にカスタマイズしたいと思ったので調べました。

ターミナルのプロンプトにはPS1 ~ 4があり、コマンドの入力待ち状態に表示れされているのものはPS1に格納されたものを出力しています。

PS1~4の内容

PS1: プライマリプロンプト

PS1は、プライマリプロンプトとして知られています。これは、通常のコマンドを入力する際に表示されるプロンプトです。自分のスタイルに合わせてカスタマイズすることで、ターミナルがより使いやすくなる。

例えば、PS1をカスタマイズしてユーザー名やホスト名、現在のディレクトリを表示するようにすることができる。また、異常終了したプロセスや最後のコマンドの実行結果なども表示させることが可能。

PS2: セカンダリプロンプト

PS2は、マルチラインのコマンドを入力する際に表示されるセカンダリプロンプト。通常は">"だが、これもユーザーが自由に変更することができる。

PS3: プロンプト用のメッセージ

PS3は、select時等のコマンド内でユーザからの入力を受け付ける際に表示されるもの。基本はコマンドに依存するのでわざわざ変えることはないのかなという感じ

PS4: プロンプトの色とスタイル

PS4は、デバッグモードで使用される。

PS1の更新タイミング

PS1はさまざまなタイミングで更新が走っており、インタラクティブに内容を変えます。

PS1の更新タイミングは、主に次のいくつかの場面がある。

  • 起動時: PS1は、シェルが起動したときに設定されます。ユーザーが新しいセッションを開始すると、シェルの初期化プロセスでPS1が適用されます。

  • コマンド実行後: PS1を変更すると、その変更は即座に反映されます。ただし、新しいプロンプトが表示されるのは、次にコマンドを入力する際です。コマンドを入力すると、新しいPS1が適用されて新しいプロンプトが表示されます。

  • 設定ファイルの読み込み時: PS1の設定は、通常は.bashrcや.bash_profileなどのシェルの設定ファイルに書かれることがあります。これらのファイルが読み込まれると、PS1の設定も更新されます。ログイン時にこれらの設定ファイルが読み込まれ、新しいプロンプトが表示されます。

  • プロンプトの変更コマンド: ユーザーが手動でPS1を変更するコマンドを実行した場合、その時点で新しいプロンプトが反映されます。

要するに、PS1は基本的にシェルのセッションが始まる際やコマンドが実行されるたびに適用され、プロンプトが変更されます。

プロンプトエスケープ

プロンプトエスケープは、ターミナルのプロンプトに表示されるテキストを装飾するための特殊な制御文字やシーケンスです。これを使用することで、例えば文字の色やスタイル、背景色などを変更して目立たせることができる。これは、特にシェルプロンプトをカスタマイズする際に便利

装飾のほか、日付や今いるディレクトリなどの取得もこれで行える

zsh.sourceforge.io

非同期でより高速に

下のリンクにあるように非同期でやるとちょっと込み入ったプロンプトも高速にできる

www.m3tech.blog

ちょっと自己流プロンプトを作って見たいと思います。