コマンドラインがもっと快適に!便利でおもしろいBashプロンプト8選
コマンドラインのプロンプトは、多くの人にとって「見慣れた記号」以上の存在として意識されていません。しかし実は、プロンプトを工夫するだけでコマンドライン操作の効率や快適さが大きく変わります。この記事では、実用性と面白さを兼ね備えたBashプロンプトのアイデアを8つ、実際のコード例とともに紹介します。まず各プロンプトを紹介し、最後にカスタマイズや導入方法に関するよくある質問にお答えします。
ここで挙げるプロンプトには、真面目なものばかりではなく遊び心のあるものも含まれています。たとえば最初のエントリーは、ターミナル作業にちょっとした楽しさを添えてくれるでしょう。
1. コマンド成功時に「顔文字(カオモジ)」を表示する
ユーモアがありながら実用的なプロンプトです。仕組みはシンプルで、コマンドが正常に実行されれば笑顔の顔文字「^_^」が表示されます。
逆にコマンドが失敗すると、「O_O」という困った表情の顔文字に切り替わります。
導入するには、次のコードを使用してください。
PS1="\`if [ \$? = 0 ]; then echo \[\e[33m\]^_^\[\e[0m\]; else echo \[\e[31m\]O_O\[\e[0m\]; fi\`[\u@\h:\w]\$ "
一見ややこしく見えますが、if文で直前のコマンドの成否を判定し、それに応じて顔文字を出し分けています。顔文字の前後にあるエスケープ処理は、正しく表示させるためのものです。
2. コマンド失敗時にプロンプトの色を変える
このリストの中でも最も実用的といえるプロンプトです。前項と同様に、直前のコマンドが失敗したときにプロンプトの色が変化するだけでなく、長いパスを短縮表示し、各コマンドの履歴番号も併せて表示するため、過去のコマンドを呼び出しやすくなっています。
PROMPT_COMMAND='PS1="\[\033[0;33m\][\!]\`if [[ \$? = "0" ]]; then echo "\\[\\033[32m\\]"; else echo "\\[\\033[31m\\]"; fi\`[\u.\h: \`if [[ `pwd|wc -c|tr -d " "` > 18 ]]; then echo "\\W"; else echo "\\w"; fi\`]\$\[\033[0m\] "; echo -ne "\033]0;`hostname -s`:`pwd`\007"'
これも難しそうに見えますが、中身はシンプルです。if文で条件を判定し、カラーコードでメッセージを強調表示しています。
色は自由に設定できますが、「視認性の向上につながるかどうか」という観点で論理的に選ぶのがおすすめです。変えること自体が目的にならないよう注意しましょう。
3. プロンプトを複数行に展開する
プロンプトに多くの情報を盛り込みたい人にぴったりのスタイルです。日付や時刻、完全なディレクトリパス、ユーザー名とホスト名、使用中の端末に加え、ファイル数やディスク使用量まで表示できます。
PS1="\n\[\033[35m\]\$(/bin/date)\n\[\033[32m\]\w\n\[\033[1;31m\]\u@\h: \[\033[1;34m\]\$(/usr/bin/tty | /bin/sed -e 's:/dev/::'): \[\033[1;36m\]\$(/bin/ls -1 | /usr/bin/wc -l | /bin/sed 's: ::g') files \[\033[1;33m\]\$(/bin/ls -lah | /bin/grep -m 1 total | /bin/sed 's/total //')b\[\033[0m\] -> \[\033[0m\]"
こちらはif文を使用せず、レイアウトは固定のまま内容だけが動的に更新される構成です。要素が多くて解析しにくいと感じたら、まずそのまま適用してから、一つずつ分解して確認するのがおすすめです。少しずつ照らし合わせていくうちに、全体の組み立て方が理解できるようになります。
4. 色分けでプロンプトを読みやすくする
凝った仕掛けはないものの、色を使って情報を整理している好例です。時刻、ユーザー名、ホスト名、現在のディレクトリを、それぞれ異なる色で区切って表示しています。
PS1="\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "
これは最も実用的なBashプロンプトの一つであり、プロンプトをカスタマイズする際の最初のステップとしても最適です。独自プロンプトの仕組みを学ぶための良い土台になるでしょう。
5. 完全なディレクトリパスを表示する
色使いの考え方と同様に、すっきりとしたミニマルな2行構成のプロンプトです(先頭に空行があります)。
1行目に作業ディレクトリのフルパスを表示し、2行目にユーザー名を表示します。
PS1="[\[\033[32m\]\w]\[\033[0m\]\n\[\033[1;36m\]\u\[\033[1;33m\]-> \[\033[0m\]"
空行が不要なら、先頭の\nを削除すればOKです。ただし、レイアウトや書式は自分の環境に合わせて調整してみてください。コンピューターやターミナルの設定によって、見え方は人それぞれ異なります。
6. バックグラウンドジョブ数を表示する
この2行タイプのプロンプトでは、これまでの例にはなかった情報を扱います。バックグラウンドで動作中のジョブ数を常に確認でき、マルチタスクしながらシステムの状況を把握したい場合に便利です。
1行目にはユーザー名、ホスト名、作業ディレクトリのパス。2行目には履歴番号と、バックグラウンドで実行中のジョブ数を表示します。
PS1='\[\e[1;32m\]\u@\H:\[\e[m\] \[\e[1;37m\]\w\[\e[m\]\n\[\e[1;33m\]hist:\! \[\e[0;33m\] \[\e[1;31m\]jobs:\j \$\[\e[m\] '
特別に複雑なところはありませんが、システムの稼働状況という貴重な情報を手に入れられます。さらに発展させて、if文や色分けを追加し、ジョブ数が一定の水準に達したら通知するようなプロンプトにすることも可能です。
7. 作業ディレクトリの詳細情報を表示する
このプロンプトでは、1行目にユーザー名とホスト名、ジョブ数、日付と時刻を表示します。2行目には現在のディレクトリに加え、ディレクトリ内のファイル数やディスク使用量の情報を並べています。
PS1="\n\[\e[30;1m\]\[\016\]l\[\017\](\[\e[34;1m\]\u@\h\[\e[30;1m\])-(\[\e[34;1m\]\j\[\e[30;1m\])-(\[\e[34;1m\]\@ \d\[\e[30;1m\])->\[\e[30;1m\]\n\[\016\]m\[\017\]-(\[\[\e[32;1m\]\w\[\e[30;1m\])-(\[\e[32;1m\]\$(/bin/ls -1 | /usr/bin/wc -l | /bin/sed 's: ::g') files, \$(/bin/ls -lah | /bin/grep -m 1 total | /bin/sed 's/total //')b\[\e[30;1m\])--> \[\e[0m\]"
こうしたプロンプトで最も難しいのは、書式指定やエスケープ処理の部分を読み解くことです。複数行プロンプトと同様、全体を一度に理解しようとせず、断片ごとに分解しながら構造を掴んでいくのがコツです。
少しずつ入力しては表示結果を確認し、エラーが出ないか確かめながら、最終的にコード全体を完成させる方法もあります。
8. 自分だけのBashプロンプトを作る
ここまで紹介した要素は、自由に組み合わせてオリジナルのBashプロンプトを作れます。たとえば以下の例は、7番目のプロンプトをベースに、省スペース化と必要な情報への絞り込みを行ったものです。
2行スタイルはコンパクトで、コマンド入力領域を狭めることなくフルパスを確認できるのが魅力です。
PS1="\n\[\e[32;1m\](\[\e[37;1m\]\u\[\e[32;1m\])-(\[\e[37;1m\]jobs:\j\[\e[32;1m\])-(\[\e[37;1m\]\w\[\e[32;1m\])\n(\[\[\e[37;1m\]! \!\[\e[32;1m\])-> \[\e[0m\]"
ここまで読めば、このコードの意味もおおよそ理解できるはずです。ただ、単にコピペするよりも、自分でゼロから作ってみることをおすすめします。そうすることで各要素がどう連携するのかを実感でき、あなただけの独自プロンプトが生まれるかもしれません。
よくある質問
Q1. そもそもBashプロンプトを変えるメリットは?
理由はさまざまですが、最大のポイントは生産性です。コマンドラインを頻繁に使うなら、プロンプトは数秒ごとに目に入ります。重要な情報を盛り込んでおけば、必要なデータが常時手元にある状態をつくれるのです。
多くの場合、カスタムプロンプトを活用するほうが、複数ウィンドウを開いて情報を確認するより効率的です。
Q2. これらのプロンプトをターミナルに反映するには?
コードをコピーしてターミナルアプリに貼り付けるだけで使えます。ただしその場合、反映されるのは現在のセッションのみなので、理論上はターミナルを起動するたびに同じ操作が必要です。
恒久的に変更したい場合は、コードを~/.bashrcファイルの末尾に追記し、ターミナルを再起動してください。
Q3. 他のシェルでも同じように使える?
多くの場合、他の種類のシェルとの間である程度の互換性があります。ただし、100%同じ挙動になるとは限りません。
たとえばMacのターミナルのカスタマイズ記事で扱っているzshでは、細部に違いはあるものの、共通点は非常に多いです。
Q4. プロンプトに追加できる情報や要素はどうやって調べる?
システム上のほぼすべての要素をBashプロンプトに表示できます。鍵となるのはBashの変数で、これを知ることがさまざまな要素を「解放」する第一歩です。
何を変更できるかを理解するための優れたリファレンスとして、Linux.comのドキュメントがあります。カスタマイズ作業中は手元に置いておくと安心です。
Q5. カスタムプロンプトをやめたくなったら?
簡単な話で、設定ファイルを開いて該当する行を削除すればOKです。追加でコマンドを実行する必要はありませんが、期待どおりに変化しない場合はターミナルを再起動しておくとよいでしょう。
コマンドラインを日常的に使っている方や、ターミナル起動時に特定のニーズがある方は、プロンプトのカスタマイズを試す価値が十分にあります。高度な知識はほとんど不要で、多くの場合は他の開発者が公開しているプロンプトを流用できますよ。
-
LinuxターミナルのBashプロンプトの色と表示内容をカスタマイズする方法
現在、Bashは多くの(ほぼすべての)モダンなLinuxディストリビューションでデフォルトのシェルとして採用されています。しかし、ディストリビューションによって、ターミナルの文字色やプロンプトの表示内容が異なることに気づいたことはありませんか?アクセシビリティの向上のため、あるいは単なる好みでこれをカスタマイズしたいと思ったことがあるなら、ぜひ読み進めてください。本記事では、その具体的な方法を分かりやすく解説します。PS1 Bash環境変数とはコマンドプロンプトやターミナルの外観は、PS1という環境変数によって制御されています。Bashのmanページによると、PS1は「プライマリプロンプト文字
-
Powerline – VimエディターとBashターミナルに強力なステータスラインとプロンプトを追加する方法
Powerlineは、Pythonで開発された高機能なステータスラインプラグインです。Vimエディターはもちろん、bash、zsh、tmuxなど、さまざまなアプリケーションに対して美しく情報量の多いステータスラインとプロンプトを提供します。開発者にとって視認性が高く、作業効率を向上させる人気のツールです。 Powerlineの主な特徴 Pythonで実装されているため、拡張性が高く豊富な機能を備えています。 安定性とテスト性に優れたコードベースで、Python 2.6以降およびPython 3に対応しています。 複数のLinuxユーティリティやツールに対するプロンプト・ステータスラインをサ