bashシェルのカスタマイズ:コマンドの太字/色付け


13

オンラインで多数のチュートリアル/投稿があります(例:http : //www.cyberciti.biz/faq/bash-shell-change-the-color-of-my-shell-prompt-under-linux-or-unix/)を設定してbashのプロンプトをカスタマイズする方法についてPS1。入力したコマンドの色/太字をカスタマイズする方法はありますか?

言い換えれば、例として、緑のプロンプト、太字の青のコマンド、そしてデフォルトの色で出力したかったとしましょう。以下の例では、joe>設定によって緑、青、太字などを表示する方法をすでに知っていますPS1。しかしgit status、たとえば大胆に見せることができる方法はありますか?

joe> git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
...

本当に良いシェルが必要な場合は、zshを使用する必要があります。ここで達成したいことは非常に簡単preexec() { printf '\e[0m' }
です-bollovan

3
@bollovan-「本当に良い」は少し主観的です。その肥大化とPOSIXの非準拠のために、私はそれを本当に嫌悪感を覚えます。しかし、あなたのボートに浮かぶものは何でも。
クリスダウン

@ChrisDownふくらみはあなたのボートを浮かぶ-それを聞いたことがない、非常に面白い。
n611x007

回答:


13

PS1の後に色を残して(>例では後から開始)、DEBUGコマンドを実行する前(ただし、シェルでEnterキーを押した後)にbash トラップを使用して色をクリアする必要があります。 :

shopt -s extdebug
trap "tput sgr0" DEBUG

見知らぬ人がコードをエスケープする場合:これはコマンドの元の色付けを保持しls --color=alwaysますか(例:色付けされます)?
n611x007

@naxa-はい、これは明示的に色コードを設定します(デフォルトの端末色で色付けされた色は例外で、これは最初の色の後でのみ有効になります)。
クリスダウン

このトリックは、タブの補完を妨げるようです(のような奇妙なものを印刷します^[(B^[[m)。ただし、一部のシステムでのみ発生します。Ubuntu12.04 LTSを実行している2つのシステムでこれをテストし、そのうちの1つのみが干渉を受けました。
ムシフィル

7

完全を期すために、bashでプロンプトの色とコマンドラインの入力色を設定する方法を次に示します。これらの行をに置きます.bashrc

PS1='\[\e[1;34m\]\w\$ \[\e[0;32m\]'
trap 'printf \\e[0m' DEBUG

Chris Downが提案する DEBUGトラップは、テキスト属性をリセットするために使用されます。デバッグ用ですが、ユーザーが入力したコマンドを実行する前にコードを実行すると便利です

プロンプト設定で:

  • \[…\] エスケープシーケンスの周りで使用され、bashが画面の領域を使い果たしていないことを示します(これらがないと、bashがプロンプトを再描画する必要があるときに画面が文字化けします)。
  • \e[…mここで、数字、またはより一般的にはセミコロンで区切られた数字のシーケンスは、次のテキストの色やその他の属性に影響を与えるために端末に送信されるエスケープシーケンスです。たとえば、1;34太字の青を設定します。0;32すべての属性をリセットしてから、色を緑に切り替えます。好みに合わせて調整してください。
  • \w\$現在のディレクトリを印刷する$または#。もちろん、これを好きなように変更し、必要に応じて間にテキスト属性の変更を挿入できます。
  • 最後に最終的な属性の変更があり、テキスト入力の色が設定されます。


0

私はちょうどBASHコマンドについて学んでおり、私のバージョンのカラーコマンドで遊んでいます。私はこの解決策を見つけました:

このコマンドの使用:

PS1='\[\e[0:36m\]\h>\[\e[0;31m\]'

分解:PS1 =:PS1コマンドを開始します

'':コマンドを単一引用符で囲みます(したがって、BASHはコマンドをコマンドとは見なしません)

\:各コマンドはこれで始まります

[]:各コマンドが含まれます

\ e(ASCIIエスケープ文字\ 033も可能):カラーコマンドを開始

colorコマンドは、適用対象よりも優先されます。

[\ e [0; 36m]:シアン

\ h:ホスト名

'>':ホスト名の後に印刷されます

[\ e [0; 31m]:赤

どうやら、最後のredコマンドは入力を赤にします。お好みに合わせて色を変えるだけで、それがあなたが探しているものです。

また、このサイトは少し助けてくれました。

https://www.linuxnix.com/linuxunix-shell-ps1-prompt-explained-in-detail/

私のバージョン:GNU bash、v。4.2.46

気を付けて、

イタチ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.