端末にuser @ machineを太字で表示するにはどうすればよいですか?


31

私は、端末が[username@machine /]$太字で表示できることをいくつかのスクリーンショットで見ました(Webのどこにあるか覚えていません)。私はいつも長い出力をスクロールして、コマンドの後の最初の行を見つけるのが難しいので、これも楽しみにしています。

ユーザー名などを太字または色付きにするにはどうすればよいですか?


bashシェルまたは他のシェルを使用しているかどうかを明確にできますか?
スティーブンクアン

Gnomeターミナルbash。
ベンジャミン

回答:


22

これを行うにPS1は、~/.bashrcファイル内のプロンプト変数を次のように設定します。

PS1='[\u@\h \w]\$ '

色付けする(そしておそらく太字-これはターミナルエミュレータが有効にしているかどうかによって異なります)ために、エスケープカラーコードを追加する必要があります。

PS1='\[\e[1;91m\][\u@\h \w]\$\[\e[0m\] '

ここでは、1;91mとの間でエスケープされていないすべてのもの0m1;91色(太字の赤)で色付けされます。これらのエスケープコードをプロンプトのさまざまな部分に配置して、さまざまな色を使用しますが、色をリセットすることを忘れないで0mください。そうしないと、ターミナル出力も色付けされます。後でファイルを入手して、現在のシェルを更新することを忘れないでください。source ~/.bashrc


赤に31を使用してみませんか?91は標準コードではないようです。
jw013

1
@ jw013範囲90〜97は、太字のie 1;31およびとして使用される場合、30〜37の範囲と同等1;91です。通常のフォントの太さを使用すると、90〜97の範囲は他のフォントよりも明るい色になります。

45

であなたPS1が設定されている場所を見つけて、最初と最後に.bashrc挿入'\[\e[1m\]'します\[\e[0m\]

  • \[そして\]シェルは混乱の内側には、行編集を行う際に、いくつかのめちゃくちゃ行動を防ぎ、画面上の0スペースをとり知っているので必要です。心配する必要はありません。
  • \e[CSI(制御シーケンスイントロデューサー)として知られています。参照されているウィキペディアのページにリストされているほとんどのコードで使用されていることがわかります。\e はエスケープ文字を意味します。
  • ウィキペディアページのSGRテーブルを見ると、1が明るい/太字のテキストの数であり、0がリセット用であることがわかります。したがってCSI 1m、太字をオンにしCSI 0mてフォントをリセットし、残りのテキストが正常になるようにします。

ウィキペディアには、ターミナルエミュレータがサポートしている場合に使用できるANSIエスケープコードの完全なリストがあります。

編集

移植性と読みやすさのためtputに、ハードコーディングのエスケープコードの代わりに使用する必要があります。唯一の欠点は、tputANSIコードをサポートしているがterminfoデータベースが壊れているか欠落している端末ではアプローチが機能しないことですが、その場合、terminfoに依存する多くのコンソールアプリが適切に機能しない可能性があるため、壊れたterminfoは大きな問題です。

ここで私が私の中で何をするかの例です.bashrc

# color names for readibility
reset=$(tput sgr0)
bold=$(tput bold)
black=$(tput setaf 0)
red=$(tput setaf 1)
green=$(tput setaf 2)
yellow=$(tput setaf 3)
blue=$(tput setaf 4)
magenta=$(tput setaf 5)
cyan=$(tput setaf 6)
white=$(tput setaf 7)
user_color=$green
[ "$UID" -eq 0 ] && { user_color=$red; }
PS1="\[$reset\][\[$cyan\]\A\[$reset\]]\[$user_color\]\u@\h(\l)\
\[$white\]:\[$blue\]\W\[$reset\][\[$yellow\]\$?\[$reset\]]\[$white\]\
\\$\[$reset\] "

これが私の汎用バージョンがどのように見えるかです。これ0は、最後のコマンドの終了ステータスです。

PS1スクリーンショット


素敵で説明的な答え、+ 1。それでも、私はヘッセの答えをもっとポイントに見つけたので、代わりにそれを選びました。
ベンジャミン

これを試したとき、ターミナルプロンプトが正しくラッピングされないなどの問題に遭遇しました。あなたは?エスケープシーケンスを更新しましたか?
ステファンLasiewski

6

これは、cygwin bashシェルで表示されるデフォルトのプロンプトです。

PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$ '

ここに画像の説明を入力してください

\[\e]0;\w\a\] = Set the Window title to your current working directory
\n            = new line
\[\e[32m\]    = Set text color to green
\u@\h         = display username@hostname
\[\e[33m\]    = Set text color to yellow
\w            = display working directory
\[\e[0m\]     = Reset text color to default
\n            = new line
\$            = display $ prompt

参照:


ニース、[user @ host]の前に新しい行を追加しましたこれにより、各コマンドがさらに読みやすくなります(ターミナルimoでデフォルトで設定されるはずです)。
ベンジャミン

2

このシェル関数を使用して、ターミナルでテキスト属性を取得します。

color () {
  if [ -z "$1" -a -z "$2" -a -z "$3" ]; then
    echo "\033[0m"
    return
  fi
  case $1 in
    black)   color_fg=30;;
    red)     color_fg=31;;
    green)   color_fg=32;;
    yellow)  color_fg=33;;
    blue)    color_fg=34;;
    magenta|purple) color_fg=35;;
    cyan)    color_fg=36;;
    white)   color_fg=37;;
    -)       color_fg='';;
    *)       color_fg=39;;
  esac
  case $2 in
    bold)      color_bd=1;;
    italics)   color_bd=3;;
    underline) color_bd=4;;
    inverse)   color_bd=7;;
    strike)    color_bd=9;;
    nobold)      color_bd=22;;
    noitalics)   color_bd=23;;
    nounderline) color_bd=24;;
    noinverse)   color_bd=27;;
    nostrike)    color_bd=29;;
    -)         color_bd='';;
    *)         color_bd=0
  esac
  case $3 in
    black)   color_bg=40;;
    red)     color_bg=41;;
    green)   color_bg=42;;
    yellow)  color_bg=43;;
    blue)    color_bg=44;;
    magenta|purple) color_bg=45;;
    cyan)    color_bg=46;;
    white)   color_bg=47;;
    -)       color_bg='';;
    *)       color_bg=49;;
  esac
  s='\033['
  if [ -n "$color_bd" ]; then
    s="${s}${color_bd}"
    if [ -n "$color_fg" -o -n "$color_bg" ]; then
      s="${s};"
    fi
  fi
  if [ -n "$color_fg" ]; then
    s="${s}${color_fg}"
    if [ -n "$color_bg" ]; then
      s="${s};"
    fi
  fi
  if [ -n "$color_bg" ]; then
    s="${s}${color_bg}"
  fi
  s="${s}m"
  echo "$s"
  unset s color_bd color_bg color_fg
}

次に、それを使用するには:

color_reset=`color`
color_grbd=`color green bold`
color_bubd=`color blue bold`
PS1="\[${color_grbd}\][\u@\h]\[${color_reset}\]:\[$color_budb}\]\w\[${color_reset}\]> "

これにより[username@hostname]:cwd>username@hostname太字の緑とcwd太字の青が表示されます。


これをありがとう。私も上記のすべてをコピーしなければならなかったと思い~/.bashrcますか?
ベンジャミン

はい、~/.bashrcファイルに設定し、それを使用してプロンプトを設定します。使用しているシステムに応じて色を変更します。
アルセージュ

1

デフォルトのUbuntuプロンプトのように見せるために、追加します

export PS1='\[\e[1;32m\]\u@\h\e[0;39m\]:\e[1;34m\]\w\e[0;39m\]$\[\e[0m\] '

あなたの~/.bashrc

これにより、よく知られている緑user@host(太字)、太字でない白いコロン、太字の青い作業ディレクトリ、$記号、スペース、太字でない白い文字のコマンドが続きます。

Ubuntu Bashプロンプト

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