8つの便利で興味深いBashプロンプト

多くの人は、コマンドラインプロンプトを便利な要素とは考えておらず、あまり注意を払っていません。しかし、便利なプロンプトはコマンドラインの使い方、ひいてはシステムの使い方を変えることができます。この記事では、いくつかの便利で興味深いBashプロンプトを例とともに紹介します。プロンプト自体を説明した後、使い方についてのさらなる指示を提供します。
ここではいくつかのBashプロンプトを紹介しますが、すべてが真面目なものではありません。例えば、リストの最初のエントリーは、コマンドラインを使っているときに少しの喜びをもたらすものです!
また読んでください: Linux初心者のための基本Bashコマンド
1. 成功した実行時に「カオモジ」を表示する
このプロンプトは面白く、かつ便利です!アイディアは、成功したコマンドを実行する限り、プロンプトに幸せなカオモジが表示されるというものです。

逆に、コマンドが失敗した場合は悲しいカオモジが表示されます。
これを適用するには、以下のコードを使用します:
PS1="\`if [ \$? = 0 ]; then echo \[\e[33m\]^_^\[\e[0m\]; else echo \[\e[31m\]O_O\[\e[0m\]; fi\`[\u@\h:\w]\\$ "このコードは混乱して見えるかもしれませんが、コマンドが良いか悪いかを判断するためにifステートメントを使用しています。そこからカオモジの周囲にエスケープを使用して正しい方法で表示されるようにしています。
また読んでください: Gnusを使ったUSENETリーダーとしてのEmacsの使い方
2. ターミナルが不正なコマンドを発行したときにBashプロンプトの色を変更する

このプロンプトはリストの中で最も便利であると言えるでしょう。上記と同様に、最後のコマンドが正常に実行できなかった場合は色が変わりますが、長いパスを短縮し、各コマンドのBashヒストリ番号を含んでいるため、簡単に取得できます。
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"'これも一見 daunting に感じるかもしれませんが、実際には簡単です。アイフステートメントと色コードを使用して、さまざまなメッセージを強調表示します。
これらの色を好きな色に変更することができますが、変更された色が変更のためだけに変えられたのではなく、あなたに役立つようにするために論理的な思考を働かせることをお勧めします。
また読んでください: LeafnodeをオフラインUSENETサーバーとしてセットアップする方法
3. 複数行にわたってBashプロンプトを展開する

時には、Bashプロンプトに多くの情報を含めたい場合があります。これがあなたを表すなら、興味をそそるBashプロンプトかもしれません。日付、時間、フルディレクトリパス、ユーザー名とホスト名、アクティブなターミナル、ファイル数、ディスク使用量を表示します。
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. 色を使ってBashプロンプトをより読みやすくする
このプロンプトには、情報の異なる部分を分けるための良い色使い以外には特に目新しいものはありません。ご覧のとおり、時間、ユーザー名、ホスト名、現在のディレクトリを提供します。
PS1="\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "これは最も便利なBashプロンプトの一つであり、カスタマイズのために最初に考慮すべき領域です。カスタムプロンプトの仕組みを学ぶ良い基盤を提供します。
5. フルディレクトリパスを表示する
色を使用するのと同じように、このプロンプトは清潔で最小限の二行プロンプトです(ただし、最上部に空白行があります)。

最初の行にはフル作業ディレクトリパスが表示され、下にはユーザーがその下に表示されます。
PS1="[\[\033[32m\]\w]\[\033[0m\]\n\[\033[1;36m\]\u\[\033[1;33m\]-> \[\033[0m\]"プロンプト内に空白行を使用したくない場合は、最初の\nを取り除くことができます。ただし、レイアウトやフォーマッティングで遊んでみてください。各ターミナルの体験はあなたのコンピュータやコマンドライン設定によって異なるためです。
6. バックグラウンドジョブカウントを表示する
この二行プロンプトは、私たちがこれまで使用していなかった情報を表示します。バックグラウンドジョブの合計を提供します。これはマルチタスクを行う場合に役立ちます。

最初の行にはユーザーとホスト名、作業ディレクトリパスが含まれ、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. 作業ディレクトリの情報を表示する

これでは、ユーザーとホスト名、ジョブのカウント、日付と時間を最上行に表示します。その下には現在のディレクトリとファイル数、ディスク使用状況の情報が表示されます。
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番目の修正であり、スペースを節約しつつも特定の関連情報を含むように変更されています。
二行スタイルは常によりコンパクトであり、コマンド用のスペースを減らすことなくフルパスを表示できます。
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\]"これで、このプロンプトが何をするのか理解できるでしょうが、私たちのアドバイスは、これをそのまま貼り付けるのではなく、自分自身で作成を試みることです。そうすれば、さまざまな要素がどのように連携しているかを学ぶことができ、自分自身のカスタムBashプロンプトを作成することができるかもしれません。
よくある質問
1. なぜ異なるBashプロンプトを利用したいと思うのでしょうか?
さまざまな理由がありますが、生産性が重要な考慮点です。コマンドラインを頻繁に使用する場合、プロンプトは数秒ごとに表示されます。そのため、最も重要な情報を入れておけば常に手元に置いておけます。
多くの場合、カスタムBashプロンプトを使用することは、ウィンドウをいくつも開くよりも効率的です。
2. これらのBashプロンプトをターミナルの出力に追加するにはどうすればよいですか?
これらのプロンプトのいずれかを使用するには、コードをコピーしてターミナルアプリに貼り付けます。しかし、これは現在のセッションにのみ適用されるため、理論的にはターミナルを起動するたびにこれを行う必要があります。
変更を永続的にしたい場合は、スニペットを~/.bashrcファイルの最後に貼り付けて、ターミナルを再起動してください。
3. これらのBashプロンプトは他のシェルでも機能しますか?
多くの場合、異なるタイプのシェルとの互換性があることがわかります。しかし、変更が100パーセントの互換性を提供する保証はありません。
Macターミナルをカスタマイズすることに関する投稿を確認すると、zshを使用していることがわかります。マイナーな違いはありますが、多くの類似点もあります。
4. どのようにしてBashプロンプトに追加できる情報や要素を見つけるのですか?
ほとんどすべてのシステム要素をBashプロンプトに表示できます。Bash変数を調査することで、これらのさまざまな要素を「アンロック」することができます。
変更可能な要素を理解するための優れたリソースはLinux.comのウェブサイトにあり、カスタマイズセッション中にそのドキュメントを手元に置いておくことをお勧めします。
5. もはやターミナルでカスタムBashプロンプトを使用したくない場合はどうすればよいですか?
ここでのシンプルな答えは、設定ファイルを開いて関連する行を削除することです。特に追加のコマンドを実行する必要はありませんが、期待される変更が見えない場合はターミナルを再起動するのが良いでしょう。
コマンドラインを日常的に使用する場合や、ターミナルアプリを起動するときに特定のニーズがある場合、プロンプトをカスタマイズするのは素晴らしいアイディアかもしれません。特別な知識は必要なく、多くの場合、他の開発者から必要なプロンプトを見つけることができます。