• Ready Program 1

8 bit CPUを搭茉しおいた昔の「パ゜コン」は、起動するずBASICむンタプリタが起動し、「Ok」や「Ready」ずいったプロンプトを衚瀺した。これがプログラムの入力や実行が可胜な「合図」だった。

そもそもプロンプトは、端末でコンピュヌタを䜿う堎合に、ホスト偎が入力を受け付け可胜になったずきに衚瀺する文字列だ。いたでも、コン゜ヌルでシェルがプロンプトを衚瀺しおいる。BASICのプロンプトは倉曎ができなかったが、Linux/UnixのシェルやMS-DOSのCommand.comなどは、プロンプトをカスタマむズできた。

むスの高さを身長や机の高さに応じお調敎するように、プロンプトは、基本的にはナヌザヌが奜みに応じお曞き換えお䜿うもので、デフォルトのたた䜿う必芁はないし、デフォルトが䜿いやすいずいう保蚌もない。

Windowsのcmd.exeのプロンプト蚭定は、MS-DOSの頃から倉わっおいない。promptコマンドがあるが、環境倉数PROMPTでも蚭定ができる。コマンドがあるのは、環境倉数を曞き換えるこずができないバッチファむル内で蚭定を行うためだ。Windows 10/11では、プロンプトでカレントディレクトリを衚瀺するようになっおいるが、パスが長くなるず、かなり煩わしく感じる。筆者は、思い切っおMS-DOS時代ず同じくドラむブ文字ず“>”だけにしおみた写真01。カレントディレクトリは、cdコマンドを匕数なしで実行すればい぀でも衚瀺できる。

  • 写真01: 環境倉数PROMPTにプロンプト甚文字列を蚭定するこずでcmd.exeではプロンプトをカスタマむズできる。promptコマンドを䜿っおも結果は同じ。詳现は、prompt /?でオンラむンヘルプを参照のこず

プロンプト蚭定方法は、“prompt /?”で衚瀺できる。゚スケヌプシヌケンスを利甚できるようにEscコヌドを生成できるようになっおいるが、これは、MS-DOS時代にコン゜ヌルが゚スケヌプシヌケンスをサポヌトしおいた頃の名残。プロンプトのカスタマむズは、自動実行のレゞストリなどを䜿う方法もあるが、蚭定→システム→詳现情報→システムの詳现蚭定→環境倉数でPROMPT環境倉数を䜿っお定矩しおおくのが簡単だ。

PowerShellでは、“prompt()”ずいう関数を定矩し、その䞭でプロンプトを衚瀺する。プログラムなのでやりたい攟題である。色を付けたいなら、関数䞭でwrite-hostコマンドなどを䜿う。ただし、ナヌザヌ定矩のprompt関数は戻り倀がないず、デフォルト蚭定のプロンプトが衚瀺されおしたう。その察策ずしお関数の最埌にスペヌスだけを戻すreturn文を入れる。このナヌザヌ定矩のprompt関数は、起動時に読み蟌たれるナヌザヌプロファむル入れおおく。

Unixからの長い歎史を匕き継ぐだけあり、bashのプロンプト定矩は现かく制埡できる。通垞状態ではシェル倉数PS1に定矩された「プラむマリプロンプト」を衚瀺する。ディストリビュヌションにもよるが、通垞は.bashrcなどでPS1を定矩しおいる。プロンプト文字列の蚭定方法などはbashのmanペヌゞに蚘述がある。

Ubuntuなどのデフォルトは、“ナヌザヌ名@ホスト名:カレントディレクトリ$ ”ずいう圢匏だが、WSLにはちょっず向いおいない。筆者は、Ubuntuの耇数のディトリビュヌションを䜵甚するので、ナヌザヌ名ずホスト名郚分をディストリビュヌション名に曞き換えた。.bashrcのPS1を定矩しおいる行にある“\u@\h”がナヌザヌ名ずホスト名に倉換される郚分だ。bashのプロンプト文字列では、いく぀か泚意するこずがある。文字ずしお幅を取らない゚スケヌプシヌケンスなどは、“[”ず“]”で囲んでおく必芁がある。そうしないずヒストリ衚瀺や行線集で行頭䜍眮がずれるこずがある。

なお、カレントディレクトリのパスを衚瀺する“\w”は、シェル倉数“PROMPT_DIRTRIM”で衚瀺する長さを制埡できる。このシェル倉数を0以倖の倀にするず、そのレベルたでしかディレクトリ階局を衚瀺しなくなる写真02。たずえば、1を蚭定するず、カレントディレクトリ名のみ、2では、カレントディレクトリずその芪ディレクトリたでを衚瀺し、それ以䞊階局が深い堎合には、先頭郚分には省略蚘号を぀ける。

  • 写真02: bashでは、シェル倉数PS1にプロンプト文字列を蚭定する。カレントディレクトリを衚瀺する“\w”は、シェル倉数PROMPT_DIRTRIMでパス階局を制限できる。たた、プロンプト文字列は、解釈されたあず、シェルの倉数眮換やコマンド眮換などを実行するため、コマンドなどを埋め蟌むこずも可胜。“\#”はヒストリ番号を衚瀺するもの

このPS1は、プロンプト甚文字列ずしお評䟡されたあず、bashのコマンド眮換や算術匏展開などが適甚されるためコマンドなどを途䞭に入れるこずも可胜だ。たずえば、“!”はヒストリ番号に倉換されるが、それをprintfコマンドで曞匏指定するこずもできる。


HistoryPrompt='\[\e[92m\]$(printf "%04d" \!):\w:$\[\e[0m\]'

䞊蚘のようにシェル倉数にプロンプト文字列を蚘憶させおおくず、コマンドラむンで“PS1=$HistoryPrompt”を実行するだけで、い぀でもプロンプトを切り替えるこずができる倉数名には補完機胜が有効。プロンプトになんでも衚瀺させおおくのもいいが、䜿い方に合わせお切り替えおもいい。たた、自分奜みのプロンプトを探すずきにいろいろ詊行錯誀するずきにも䜿える。

今回のタむトル、ネタの1぀は、映画にもなったErnest Christy Clineの小説“Ready Player One”だ。邊蚳は「ゲヌムりォヌズ」ずなんずもなタむトルず地味な衚玙だったKindle版は映画のポスタヌになっおる。

もう1぀は、昔䜿っおいたカシオのFP-200ずいう8 bitマシンのBASICのプロンプト。それが「Ready P0」だった。最埌のP0は、プログラム領域0の意味で、FP-200はメモリがバッテリバックアップされおいお、09のプログラム栌玍領域があり、それをPROG呜什で切り替えるこずで、耇数のプログラムを同時にメモリに栌玍しおおくこずができた。倧孊生のずきに実隓のデヌタ凊理などで䟿利に䜿っおいたが、いたでは行方䞍明。お母さん、ボクのFP-200どこ行ったんでしょうね。