端末が[username@machine /]$
を太字で表示できることを、いくつかのスクリーンショット(ウェブ上のどこにあるか思い出せません)で見ました。コマンドの後の最初の行を見つけるのに苦労して長い出力をスクロールしていることにいつも気付いているので、これもまた楽しみです。
ユーザー名などを太字や色にするにはどうすればよいですか?
次のようにPS1
ファイルの~/.bashrc
Prompt変数を設定することで、これを実行できるはずです。
PS1='[\u@\h \w]\$ '
色を付けるには(そして太字にすることもできます-これは、ターミナルエミュレータが有効にしているかどうかによって異なります)、エスケープカラーコードを追加する必要があります。
PS1='\[\e[1;91m\][\u@\h \w]\$\[\e[0m\] '
ここでは、1;91m
パーツと0m
パーツの間でエスケープされていないものはすべて、1;91
色(太字の赤)で色付けされます。プロンプトのさまざまな部分にこれらのエスケープコードを配置してさまざまな色を使用しますが、0m
を使用して色をリセットすることを忘れないでください。後でファイルを入手して、現在のシェルを更新することを忘れないでください:source ~/.bashrc
PS1
が.bashrc
のどこに設定されているかを確認し、最初に'\[\e[1m\]'
を挿入し、最後に\[\e[0m\]
を挿入します。
\[
と\]
はシェルが内部の混乱が画面上で0のスペースを占めることを認識しているため、行編集の際に動作が台無しになるのを防ぎます。あなたはそれについてあまり心配する必要はありません。\e[
はCSI(制御シーケンスイントロデューサ)として知られています。参照されているウィキペディアのページにリストされているほとんどのコードで使用されていることがわかります。 \e
は、エスケープ文字を意味します。CSI 1m
は太字をオンにし、CSI 0m
はフォントをリセットして、テキストの残りの部分が正常になるようにします。ウィキペディアには完全な ANSIエスケープコードのリスト があり、ターミナルエミュレーターがサポートしている場合に使用できます。
移植性と可読性のために、エスケープコードをハードコーディングする代わりにtput
を使用する必要があります。唯一の欠点は、tput
アプローチがANSIコードをサポートしているが、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
は、最後のコマンドの終了ステータスです。
これは、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
参照:
man bash
とPROMPTING
セクションを確認します。このシェル関数を使用して、ターミナルでテキスト属性を取得します。
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
はボールドブルーです。