端末とシェル環境を色付けしますか?

ほとんどの時間をUnix環境での作業と、ターミナルエミュレーターの使用に費やしています。色を使用すると出力がより便利で直感的になるため、コマンドラインで色を使用しようとしています。

端末環境に色を追加するには、どのようなオプションがありますか?どんなトリックを使いますか?どのような落とし穴に遭遇しましたか?

残念ながら、色のサポートは端末の種類、OS、TERM設定、ユーティリティ、バグのある実装などによって異なります。

セットアップのヒントをいくつか紹介します。 、多くの実験の後:

  1. ほとんどのホスト(すべてではない)でサポートされているTERM=xterm-colorを設定する傾向があります。
  2. さまざまなホスト、さまざまなOSバージョンなどで作業しています。macOSX、Ubuntu Linux、RHEL / CentOS / Scientific Linux、FreeBSDのすべてを使用しています。可能であれば、物事をシンプルで一般的なものにしようとしています。
  3. GNU screenを使用して多くの作業を行っています。これにより、さらに楽しいレイヤーが追加されます。
  4. 多くのOSはdircolorsのようなものをデフォルトで設定しますが、100の異なるホストでこれを変更したくありません。だから私はデフォルトに固執しようとします。代わりに、端末の色設定を微調整します。
  5. 一部の Unixコマンドlsgreplessvim)および Bashプロンプト。これらのコマンドは、標準の「 ANSIエスケープシーケンス」を使用しているようです。例:

    alias less="less --RAW-CONTROL-CHARS" export LS_OPTS="--color=auto" alias ls="ls ${LS_OPTS}" 

.bashrcを投稿し、自分の質問に答えますJeopardy Style 。

コメント

  • 私のアプローチ(以下の回答を参照)は、OSXとLinuxの違いに関する問題に対処します。たとえば、一方の色はls-Gでありもう1つはls–color-auto
  • 列に色を付けるツールを見た人はいますか?これはcolumn -t --color

回答

ここにありますできることがいくつかあります:

エディター+コード
多くのエディターには構文があります強調表示のサポート。 vimemacsではデフォルトでオンになっています。 nano で有効にすることもできます。

構文をコマンドラインツールとして使用して端末を起動します。

grep
grep --color=autoはすべての一致を強調表示します。 export GREP_OPTIONS="--color=auto"を使用して、エイリアスなしで永続化することもできます。 --color=alwaysを使用すると、配管中でも色が使用されるため、混乱します。

ls

ls --color=always

指定する色:

export LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33" 

(ヒント:dircolorsが役立つ場合があります)

PS1
色を使用するようにPS1(シェルプロンプト)を設定できます。例:

PS1="\e[33;1m\u@\h: \e[31m\W\e[0m\$ " 

次のようなPS1を生成します:

[yellow] lucas @ ubuntu:[red]〜[normal] $

これで本当にクリエイティブになります。アイデアとして:

PS1="\e[s\e[0;0H\e[1;33m\h \t\n\e[1;32mThis is my computer\e[u[\u@\h: \w]\$ " 

端末の上部にランダムな情報を表示するバーを配置します(最良の結果を得るには、 alias clear="echo -e "\e[2J\n\n""も使用してください。)

エスケープシーケンスの削除

必要のないときに色の出力が滞っている場合は、このsedを使用します。エスケープシーケンスを削除する行:

sed "s/\[^[[0-9;]*[a-zA-Z]//gi" 

より本格的なエクスペリエンスが必要な場合は、。端末にテキストを非表示にするように指示します。 (広くサポートされていません。)

sed "s/^\[^[8m.*$//gi" 

また、これらの^ [は実際のリテラル^ [である必要があることに注意してください。 bashで^ V ^ [を押すと、入力できます。つまり、 Ctrl + V Ctrl + [

コメント

  • PS1の最初の行は次のようになります:PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '。 4番目の円記号の後に余分なxがあります。
  • エスケープは\[...\]で囲む必要があります。そうしないと、2行目のコマンドが最初の行を上書きします。 PS1 = ‘ [ \ e [33; 1m ] \ u @ \ h: [ \ e [31m ] \ W \ e [0m \ $ ‘
  • ls --color=alwaysは’機能しません。@Michael Durrant ‘のアプローチは、これに適しています:ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'

回答

私も使用します:

export TERM=xterm-color export GREP_OPTIONS="--color=auto" GREP_COLOR="1;32" export CLICOLOR=1 export LSCOLORS=ExFxCxDxBxegedabagacad 

プロンプトの色付けが好きな場合は、定義された色変数を使用できます便利:

export COLOR_NC="\e[0m" # No Color export COLOR_BLACK="\e[0;30m" export COLOR_GRAY="\e[1;30m" export COLOR_RED="\e[0;31m" export COLOR_LIGHT_RED="\e[1;31m" export COLOR_GREEN="\e[0;32m" export COLOR_LIGHT_GREEN="\e[1;32m" export COLOR_BROWN="\e[0;33m" export COLOR_YELLOW="\e[1;33m" export COLOR_BLUE="\e[0;34m" export COLOR_LIGHT_BLUE="\e[1;34m" export COLOR_PURPLE="\e[0;35m" export COLOR_LIGHT_PURPLE="\e[1;35m" export COLOR_CYAN="\e[0;36m" export COLOR_LIGHT_CYAN="\e[1;36m" export COLOR_LIGHT_GRAY="\e[0;37m" export COLOR_WHITE="\e[1;37m" 

そして、プロンプトは次のようになります:

case $TERM in xterm*|rxvt*) local TITLEBAR="\[\033]0;\u ${NEW_PWD}\007\]" ;; *) local TITLEBAR="" ;; esac local UC=$COLOR_WHITE # user"s color [ $UID -eq "0" ] && UC=$COLOR_RED # root"s color PS1="$TITLEBAR\n\[${UC}\]\u \[${COLOR_LIGHT_BLUE}\]\${PWD} \[${COLOR_BLACK}\]\$(vcprompt) \n\[${COLOR_LIGHT_GREEN}\]→\[${COLOR_NC}\] " 

$(vcprompt)は、現在のパスに関するバージョン管理情報を出力する、私の〜/ sbin内のPythonスクリプトを呼び出しています。 Mercurial、Git、Svn、Cvsなどのサポートが含まれています。スクリプトの作成者はソースをここに持っています

バッシュプロンプトのスクリーンショット

これはです。プロンプト構成の完全なソース

コメント

  • 上記を使用したときに発生した回線の問題の解決策については、こちらをご覧くださいPS1: stackoverflow.com/questions/5087036/ …
  • I ‘は、プロンプトの色のエスケープされた括弧を反映するように回答を更新しました。ありがとう!
  • $LSCOLORS$CLICOLORはBSDls用です。 GNU ls(Linux)は、異なる構文で$LS_COLORSを使用します。 GNUは私の故郷のように感じるので、私はLSCOLORS=exgxfxDacxBaBaCaCaeaEaを使用してBSD上のGNU ‘の色を模倣します。
  • grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
  • 変更を有効にするには、.bashrcファイルを入手する必要がある場合があります。次のコマンドで実行できます。 source /path/to/.bashrc

回答

greplsについてはすでに説明しました。もっと多くの色が必要な場合は、汎用Coloriser を確認してください。 、当初の目的はログファイルの色付けでしたが、箱から出してすぐにpingtraceroutegccmakenetstatdifflastldap、およびcvs

簡単に拡張できます。正規表現を知っています。リストにpsnmapを追加しました(grcこれら2つのツールの.confファイルを共有できてうれしいです)

(ところで、synaptic

、そして同様にあなたはより良い検索をするかもしれませんfor “grc”)

コメント

  • grcpsデフォルトで。 ‘のnmapの色に興味があります。 grcをアップグレードするときに新しいコマンドを吸収する方法でこれらすべてのエイリアスを作成するための私の回答も参照してください。
  • それに気づきました。ここ’は私のconf.nmap(そして実際には他のすべて) gist.github.com/sygo/844982#file-conf -nmap -infosecで作業していることに気づきました。conf.hexdumpがおもしろいと思うかもしれませんが、’まだ完了していません。
  • ありがとうございます。 @Sygo。 ‘要点を分岐して修正しました。 ‘実際にgitでデータをコミットしたことはなく(github ‘の要点は言うまでもなく)、データをマージすることを提案する方法がわかりません。あなたに(私は’これは要点が単純すぎるためだと思います)
  • できると思います’ t ‘は要点であり、適切なリポジトリではないためです。私はあなたのフォークをチェックしました、そして私は’間違いなくあなたのバージョンを試してみました。 ‘その16進ダンプが何に変わるのか興味があります…

回答

私は、OSXとUbuntuの両方で動作するように、長年にわたって.bashrcを磨いてきました。
コンパクトな条件ステートメントを使用して、サイズを28行に縮小しました。
、PS1プロンプトは次のようになります:ここに画像の説明を入力

時間は赤、ユーザー名は緑、マシン名は水色、pwdは濃い青、 gitブランチは黄色で表示されます。

PS1プロンプトの機能:

  • gitブランチが表示されます!
  • 長いディレクトリパス(6要素以上)は「 「トリミング」して、その間に_がある上位3ディレクトリと下位3ディレクトリを表示します(これは、LOCATIONのpwd sed部分です)。
  • キャリッジリターンが最後に表示されるため、プロンプトは常に左側に表示されます!

.bashrcファイルの関連行は次のとおりです。

git_branch () { git branch 2> /dev/null | sed -e "/^[^*]/d" -e "s/* \(.*\)/\1/"; } HOST="\033[02;36m\]\h"; HOST=" "$HOST TIME="\033[01;31m\]\t \033[01;32m\]" LOCATION=" \033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`" BRANCH=" \033[00;33m\]$(git_branch)\[\033[00m\]\n\$ " PS1=$TIME$USER$HOST$LOCATION$BRANCH PS2="\[\033[01;36m\]>" 

利用可能な場合、色付きのlsの場合dそうでない場合でもエラーは発生しません(つまり、OSX):

ls --color=al > /dev/null 2>&1 && alias ls="ls -F --color=al" || alias ls="ls -G" 

コメント

  • lsはOSXで実行されますが、export CLICOLOR=1を使用して実行されます。
  • @ThomasWですが、Linuxでは実行されません:-p男は両方を使用します。
  • それでも、ThomasWは、MacOS10ではlsで色を使用できないと言っているので、答えが間違っていると指摘するのは正しいです。ここのプロンプト文字列は実際には欠陥があります。 \[\] 、および
    のバランスを正しくとっていません。 id = “6b1a3c2165”>

    少なくとも1人がこの回答をコピーする際に問題が発生しました。

回答

マンページの色詳細):

function _colorman() { env \ LESS_TERMCAP_mb=$(printf "\e[1;35m") \ LESS_TERMCAP_md=$(printf "\e[1;34m") \ LESS_TERMCAP_me=$(printf "\e[0m") \ LESS_TERMCAP_se=$(printf "\e[0m") \ LESS_TERMCAP_so=$(printf "\e[7;40m") \ LESS_TERMCAP_ue=$(printf "\e[0m") \ LESS_TERMCAP_us=$(printf "\e[1;33m") \ "$@" } function man() { _colorman man "$@"; } function perldoc() { command perldoc -n less "$@" |man -l -; } 

grep 1;32は明るい緑色です。他の色については、こちらの他の投稿をご覧ください):

GREP_OPTS="--color=auto" # for aliases since $GREP_OPTIONS is deprecated GREP_COLOR="1;32" # (legacy) bright green rather than default red GREP_COLORS="ms=$GREP_COLOR" # (new) Matching text in Selected line = green alias grep="grep $GREP_OPTS" alias egrep="egrep $GREP_OPTS" alias fgrep="fgrep $GREP_OPTS" 

その他の色 GNU ls

# use the config at ~/.dircolors if it exists, otherwise generate anew eval "$( dircolors --sh $(ls -d ~/.dircolors 2>/dev/null) )" # Usage: _ls_colors_add BASE NEW [NEW...] # Have LS color given NEW extensions the way BASE extension is colored _ls_colors_add() { local BASE_COLOR="${LS_COLORS##*:?.$1=}" NEW if [ "$LS_COLORS" != "$BASE_COLOR" ]; then BASE_COLOR="${BASE_COLOR%%:*}" shift for NEW in "$@"; do if [ "$LS_COLORS" = "${LS_COLORS#*.$NEW=}" ]; then LS_COLORS="${LS_COLORS%%:}:*.$NEW=$BASE_COLOR:" fi done fi export LS_COLORS } _ls_colors_add zip jar xpi # archives _ls_colors_add jpg ico JPG PNG webp # images _ls_colors_add ogg opus # audio (opus now included by default) CLICOLOR=1 # BSD auto-color trigger (like ls -G but for everything) if ls -ld --color=auto / >/dev/null 2>&1 then alias ls="ls -ph --color=auto" else alias ls="ls -ph" fi 

インストール grc 汎用カラー)そしてそれをエイリアスに追加します:

# using this as a variable allows easier calling down lower export GRC="grc -es --colour=auto" # loop through known commands plus all those with named conf files for cmd in g++ head ld ping6 tail traceroute6 `locate grc/conf.`; do cmd="${cmd##*grc/conf.}" # we want just the command # if the command exists, alias it to pass through grc type "$cmd" >/dev/null 2>&1 && alias "$cmd"="$GRC $cmd" done # This needs run-time detection. We even fake the "command not found" error. configure() { if [[ -x ./configure ]]; then colourify ./configure "$@" else echo "configure: command not found" >&2 return 127 fi } # GRC plus LS awesomeness (assumes you have an alias for ls) unalias ll 2>/dev/null if ls -ld --color=always / >/dev/null 2>&1; then GNU_LS="--color=always"; fi ll() { if [[ -t 1 ]] || [[ -n "$CLICOLOR_FORCE" ]] then colourify ls -l $GNU_LS "$@" else ls -l "$@" fi } 

diff :関数のコンテンツが多すぎるため、スクリプトを使用してrcファイルでエイリアスを作成します(grcをインストールした場合は不要):

#!/usr/bin/perl use strict; use warnings; open (DIFF, "-|", "diff", @ARGV) or die $!; my $ydiff = 1; while (<DIFF>) { if (not -t 1) { print; next; } chomp; $ydiff = 0 if /^[ <>\@+-]/ or ($. == 1 && /^\d+[a-z]{1,5}\d+$/); my $color = ""; if (! $ydiff && /^[\@+-<>]/) { $color = (/^[<-](?!--$)/ ? 1 : /^[+>]/ ? 2 : 5); } elsif ($ydiff && /\t {6}([<|>])(?:\t|$)/) { $color = ($1 eq "<" ? 1 : $1 eq ">" ? 2 : 4); } $color ? printf ("\e[1;3%dm%s\e[0;0m\n",$color,$_) : print "$_\n"; } close DIFF; 

bashプロンプトの色

# Shorten home dir, cygwin drives, paths that are too long if [ -d /cygdrive ] && uname -a |grep -qi cygwin; then CYGWIN_OS=1; fi function PSWD() { local p="$*" space A B cols="${COLUMNS:-`tput cols 2>/dev/null || echo 80`}" p="${p/$HOME/\~}" # shrink home down to a tilde if [ -n "$CYGWIN_OS" ] && [ "${p#/cygdrive/?/}" != "$p" ]; then p="${p:10:1}:${p:11}" # /cygdrive/c/hi -> c:/hi fi space="$((${#USER}+${#HOSTNAME}+6))" # width w/out the path if [ "$cols" -lt 60 ]; then echo -n "$N "; space=-29; p="$p$N\b"; fi if [ "$cols" -lt "$((space+${#p}+20))" ]; then # < 20 chars for the command A=$(( (cols-20-space)/4 )) # a quarter of the space (-20 for cmd) if [ $A -lt 4 ]; then A=4; fi # 4+ chars from beginning B=$(( cols-20-space-A*2 )) # half (plus rounding) of the space if [ $B -lt 8 ]; then B=8; fi # 8+ chars from end p="${p:0:$A}..${p: -$B}" fi echo "$p" } PSC() { echo -ne "\[\033[${1:-0;38}m\]"; } PR="0;32" # default color used in prompt is green if [ "$(id -u)" = 0 ]; then sudo=41 # root is red background elif [ "$USER" != "${SUDO_USER:-$USER}" ]; then sudo=31 # not root, not self: red text else sudo="$PR" # standard user color fi PROMPT_COMMAND="[ $? = 0 ] && PS1=${PS1[1]} || PS1=${PS1[2]}" PSbase="$(PSC $sudo)\u$(PSC $PR)@\h $(PSC 33)\$(PSWD \w)" PS1[1]="$PSbase$(PSC $PR)\$ $(PSC)" PS1[2]="$PSbase$(PSC 31)\$ $(PSC)" PS1="${PS1[1]}" unset sudo PR PSbase 

bashプロンプトのデモ

コメント

  • スクリーンショットに賛成する
  • PSWD()関数は以前はPOSIXと互換性がありましたが、’の方がはるかに簡単です。 bash / zsh部分文字列処理を使用します。 POSIXバージョンについては、リビジョン6 を参照してください。これには、多くの疑問符が含まれ、’端末にまったく適応できませんでした。幅。 ‘スクリーンショットを更新しませんでしたが、’は80文字幅でわずかな変更にすぎません。
  • CLICOLOR=1は’ FREEBSD 11.2
  • @SimonCでは機能しません。 –BSDシステムではなくFreeBSDシステムでGNUユーティリティを使用している可能性があります。 CLICOLOR=1 lsは、BSDを使用するls -Gと同じことを行う必要があります(古いBSDではls -g)。 ls --colorが機能する場合(エラーなし)、’はGNU ‘の

    コマンドと$CLICOLORは無視されます。

  • @SimonC。 –変更を有効にするには、実際に~/.bashrcをロードする必要があります。 source ~/.bashrcを実行するか、新しいbashセッションを開始します(ターミナルを起動するか、bashを実行します)。

回答

太字/色付きのプロンプトを設定します。 cyberciti.biz および BashFAQ

また、広くサポートされており、古い環境(FreeBSD4でも!)ではgobbledygook文字を出力せず、TERM = vt100、xtermの場合は正常に機能するように見える色設定を見つけることができました。 、xterm-color。 (ほとんどの場合)。私の.bashrcから:

# Set some options, based on the OS OS=`uname -s` case "$OS" in "SunOS" ) # Solaris ls doesn"t allow color, so use special characters LS_OPTS="-F" alias ls="ls ${LS_OPTS}" ;; "Linux" ) # GNU ls supports colors! # See dircolors to customize colors export LS_OPTS="--color=auto" alias ls="ls ${LS_OPTS}" # Get color support for "less" export LESS="--RAW-CONTROL-CHARS" # Use colors for less, man, etc. [[ -f ~/.LESS_TERMCAP ]] && . ~/.LESS_TERMCAP export GREP_OPTIONS="--color=auto" ;; "Darwin"|"FreeBSD") # Most FreeBSD & Apple Darwin supports colors export CLICOLOR=true # Get color support for "less" export LESS="--RAW-CONTROL-CHARS" # Use colors for less, man, etc. [[ -f ~/.LESS_TERMCAP ]] && . ~/.LESS_TERMCAP export GREP_OPTIONS="--color=auto" ;; * ) echo "Unknown OS [$OS]" ;; esac 

コメント

回答

ここでまだ述べられていないこと:

gccを使用してコンパイルの出力を色付けする、JohannesSchlüterによるcolorgccがあります

ログを色付けするには、マルチテールがあります

stdoutを色付けするには、 xcol

xcolの例

私は個人的に使用していますこれらはxcolツールからのものです。

#normal=$(tput sgr0) # normal text normal=$"\e[0m" # (works better sometimes) bold=$(tput bold) # make colors bold/bright red="$bold$(tput setaf 1)" # bright red text green=$(tput setaf 2) # dim green text fawn=$(tput setaf 3); beige="$fawn" # dark yellow text yellow="$bold$fawn" # bright yellow text darkblue=$(tput setaf 4) # dim blue text blue="$bold$darkblue" # bright blue text purple=$(tput setaf 5); magenta="$purple" # magenta text pink="$bold$purple" # bright magenta text darkcyan=$(tput setaf 6) # dim cyan text cyan="$bold$darkcyan" # bright cyan text gray=$(tput setaf 7) # dim white text darkgray="$bold"$(tput setaf 0) # bold black = dark gray text white="$bold$gray" # bright white text 

スクリプトでこれらの変数を次のように使用します

echo "${red}hello ${yellow}this is ${green}coloured${normal}" 

この小さな関数colouredEcho(Stack Overflowにあります)も気に入っています

function coloredEcho(){ local exp=$1; local color=$2; if ! [[ $color =~ "^[0-9]$" ]] ; then case $(echo $color | tr "[:upper:]" "[:lower:]") in black) color=0 ;; red) color=1 ;; green) color=2 ;; yellow) color=3 ;; blue) color=4 ;; magenta) color=5 ;; cyan) color=6 ;; white|*) color=7 ;; # white or invalid color esac fi tput setaf $color; echo $exp; tput sgr0; } coloredEcho "This text is green" green 

申し訳ありませんが、これ以上リンクを投稿することはできません

コメント

  • こんにちは、プロンプトパスのフラグをどのように作成しますか?三角形の端を持つ長方形のバーについて言及していますありがとう
  • ubuntu gnuターミナルでも機能しますか?
  • lnav は、色付きのログファイルを表示するための優れたツールでもあります

回答

lsコマンドの色を設定するための優れたツールがあります- http://geoff.greer.fm/lscolors/

回答

ZSH とそのプラグイン oh-my-zsh は、私が見た中で最も強力なコンソール機能の1つです。そのうちの1つは、あなたの端末。これは私のテーマの例です… ttyの色はそれほど暖かくはありませんが、この写真のように同じです…とにかくあなたはそれを気に入るはずです!

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

コメント

  • 可能であれば、Oh-My-ZSHに反対票を投じます提案:ターミナルで幅広く作業するシステムエンジニアとして、そして私のワークフローにzsh / oh-my-zshを採用しようとした人として、私は正直言って、ZSHを誰にもお勧めしません。もちろん、zshを他のシェルにちなんで名付けられたファイルにシンボリックリンクしてそのシェルをエミュレートすることはできますが、そうすると、’ .bashrc、.bash_profileなどは読み取られません。 、.zprofileファイルまたは.zshrcファイルにemulate bashを配置することはできません。 BASHの高度な機能を使用する人にとって、あなたを悩ませる微妙な点はたくさんあります。 BASHの方が優れています。
  • ZSHがBASHよりも優れているのは、コマンド補完だけですが、それでもBASHでプログラム可能です。 ‘時折のありふれたタスクを除いてシェルを使用しない人は、ZSHを採用する必要があるかもしれませんが、’は必要な人には適していません。シェルを広範囲に使用します。 =~演算子はあなたを噛むことができ、ZSHが配列を処理する方法はあなたを噛むことができます。ZSH/ Oh-My-ZSHを約9か月使用した後、私はそれで十分でした。私は自分で作成したカスタムテーマを使用していました。それをBASHに移植し、独自のgitプロンプトラインを作成しましたが、’振り返ることはありませんでした。移植性について心配する必要がなくなりました
  • “これは私が見た中で最も強力なコンソール機能の1つです。そのうちの1つは、端末のテーマを選択することです。”
  • @JonathanHartley、コメントは不完全なままにしたようです。 ?
  • ご心配ありがとうございますが、私のコメントには、私が言おうとしたすべてのことが書かれています。

回答

diff出力をカラーで表示するには、 colordiff を使用します。

sudo apt-get install colordiff 

パイプcolordiffへのdiff形式の出力:

colordiffにパイプされたdiffの出力

これには、-y(サイドバイサイド)などのdiffの代替形式の一部が含まれます。

または、スタンドアロンで呼び出された場合(何もパイプされていない場合)、「diff」のラッパーとして機能し、出力に色を付けます。したがって、これを.bashrcに入れて、「diff」をcolordiffにエイリアスします。

# if colordiff is installed, use it if type colordiff &>/dev/null ; then alias diff=colordiff 

コメント

  • .bashrcの例には最後のfiであり、1行のコマンドに変換できます:type colordiff &> /dev/null && alias diff='colordiff'

回答

ルートシェルと非ルートシェルを簡単に区別するためのテキスト装飾(太字)。 Zshの場合:

if test $UID = 0 then PS1="%B${PS1}%b " fi 

Bashの場合:

if test $UID = 0 then PS1="\033[1m${PS1}\033[0m" fi 

コメント

  • シェルを指定してください。質問’のシェル固有のタグは bash だけですが、コードは。
  • @manatwork:申し訳ありませんが、Zshであることに言及するのを忘れていました。投稿を更新しました。

回答

同じことを考えました。私には独自のアプローチがありますが、別の方法を探しています。

プログラム呼び出しの周りにbashラッパーを記述し、その出力をsedにパイプします。 sedは、各行をすぐに変更してエコーすることです=>バッファリングはそれほど多くありません。ただし、ラップされたプログラムを呼び出すたびにsedコードが解析およびコンパイルされます。

たとえば、これはipの出力に色を付けるために行うことです:

# # Colorcodes # NORMAL=`echo -e "\033[0m"` RED=`echo -e "\033[31m"` GREEN=`echo -e "\033[0;32m"` LGREEN=`echo -e "\033[1;32m"` BLUE=`echo -e "\033[0;34m"` LBLUE=`echo -e "\033[1;34m"` YELLOW=`echo -e "\033[0;33m"` # # command: ip # highlight ip addresses, default route and interface names # IP4=$GREEN IP6=$LBLUE IFACE=${YELLOW} DEFAULT_ROUTE=$LBLUE IP_CMD=$(which ip) function colored_ip() { ${IP_CMD} $@ | sed \ -e "s/inet [^ ]\+ /${IP4}&${NORMAL}/g"\ -e "s/inet6 [^ ]\+ /${IP6}&${NORMAL}/g"\ -e "s/^default via .*$/${DEFAULT_ROUTE}&${NORMAL}/"\ -e "s/^\([0-9]\+: \+\)\([^ \t]\+\)/\1${IFACE}\2${NORMAL}/" } alias ip="colored_ip" 

回答

プロンプトを設定するために、これを.bashrcファイルに入れています。

#Set variables for foreground colors fgRed=$(tput setaf 1) ; fgGreen=$(tput setaf 2) ; fgBlue=$(tput setaf 4) fgMagenta=$(tput setaf 5) ; fgYellow=$(tput setaf 3) ; fgCyan=$(tput setaf 6) fgWhite=$(tput setaf 7) ; fgBlack=$(tput setaf 0) #Set variables for background colors bgRed=$(tput setab 1) ; bgGreen=$(tput setab 2) ; bgBlue=$(tput setab 4) bgMagenta=$(tput setab 5) ; bgYellow=$(tput setab 3) ; bgCyan=$(tput setab 6) bgWhite=$(tput setab 7) ; bgBlack=$(tput setab 0) #Set variables for font weight and text decoration B=$(tput bold) ; U=$(tput smul) ; C=$(tput sgr0) #NOTE: ${C} clears the current formatting if [[ $USER = "root" ]]; then PS1="${B}${fgRed}\u${C}@\h(\s): ${fgGreen}\w${C} > " else PS1="${B}${fgCyan}\u${C}@\h(\s): ${fgGreen}\w${C} > " fi 

これにより、次のようなプロンプトが表示されます。

user@host(bash): ~/bin > 

作業ディレクトリは緑色です。 。また、シェルをsudoで実行した場合を除き、ユーザー名は太字とシアンになります。実行した場合、ユーザー名( “root”)は太字と赤で表示されます。

プロンプトを設定するためのコードを読みやすくするため、フォーマット制御文字を変数に格納するのが個人的にとても好きです。また、プロンプトの編集がはるかに簡単になります。

tputを使用する理由は、より一般的にサポートされているはずだからです。奇妙な033[01;31m\]シーケンスよりも。また、追加のボーナスとして、プロンプトでecho $PS1を実行すると、生のプロンプトが表示されます。 これらの理解できない制御シーケンスの代わりに。

回答

スクリプト出力の色付けにも役立つプロジェクトを試すことができます。その名前は、ソースフォージのScriptEchoColorです: http://scriptechocolor.sourceforge.net/

例:

echoc "@{lr}text output in light red" echoc "@{bLGu}text outpus in blue, light green background and underlined" echoc "you @{lr} can @{bLGu} mix @{-a} it all too" echoc -x "ls" #executes ls command and colorizes it automatically to be easy to be seen 

自動色は構成可能です。

これここに画像の説明を入力

回答

コマンドの出力に色を付けるための優れた汎用 Python ツールは、「 colout

Nグループの正規表現を指定し、その後にN色のコンマ区切りリストを指定します。グループに一致するテキストは、対応する色で表示されます。

たとえば、「テスト出力を見ている場合:

python -m unittest discover -v 

一部のPythonユニットテストの色なし出力

その後、スプルースを作成できますup with:

python -m unittest discover -v 2>&1 | colout "(.*ERROR$)|(.*FAIL$)|(\(.*\))" red,yellow,black bold 

いくつかのPythonユニットテストの色付き出力

正規表現に3つのグループ(括弧)とそれに続く3つの色(およびオプションで3つのスタイル)がどのようにあるかを確認しますが、省略形を使用してすべての色を「太字」に設定しました、したがって、括弧内のテキストに一致する「黒」グループは濃い灰色で表示されます。)

最後に2>&1を追加する方法にも注意してください。 unittestの出力はstderrにあるため、Python呼び出しの場合、それをstdoutに転送して、coloutにパイプできるようにしました。

これは一般的に非常に使いやすいため、新しいものを作成することがよくあります。 colout invocatイオンをオンザフライで使用し、コマンドライン履歴から再利用または変更します。

唯一の欠点は、スタンドアロンの実行可能ファイルではなくPythonパッケージとして提供されるため、インストールする必要があることです。 pip、またはsudo python setup.py installを使用します。

回答

Solarizedは便利だと思います。多くのアプリケーションで均一な色のすっきりとしたプロジェクトです。

http://ethanschoonover.com/solarized https://github.com/altercation/solarized

回答

コマンドラインでファイル名の色付けに私のcfを使用できます。これは、パイプを介して機能する簡単なawkベースのカラーライザーです。ファイル名をTruecolorsRGBで色付けします。

明るい色になります。デフォルトの構成であり、lsとは異なり、新しい色を追加してもパフォーマンスが低下することはありません。 (lsは、ミスごとにLS_COLORS文字列全体をスキャンする必要があります)。

https://github.com/AdamDanischewski/cf

cf使用法

cfスクリーンショット

回答

Macの場合、指定されたとおりに以下を使用できますここ

if [ "$TERM" = xterm ]; then TERM=xterm-256color; fi 

回答

カラーラッパーを使用しています。

cwは、GNU / linuxでの一般的なUNIXベースのコマンド用の非侵入型のリアルタイムANSIカラーラッパーです。 cwは、実行中のコマンドの環境をシミュレートするように設計されているため、シェルに「du」、「df」、「ping」などと入力すると、定義に従ってリアルタイムで出力に自動的に色が付けられます。必要なカラーフォーマットを含むファイル。 cwは、ワイルドカードマッチカラーリング、トークン化カラーリング、ヘッダー/フッター、ケースシナリオカラーリング、コマンドライン依存の定義カラーリングをサポートしており、50を超える既成の定義ファイルが含まれています。

ほぼシームレスですが、インタラクティブシェルのpsは、パイプのpsと比較して異なる出力を返すことがわかりました。

回答

vimを私のようにカラフルにしたい場合は、次の2つの手順に従うことをお勧めします。

  1. オンにする方法を学ぶこのリンクをたどると、この機能は次のようになります: viまたはvimで色構文の強調表示をオンにします

リンクの主な手順:

  1. 次のコマンドを入力して〜/ .vimrcファイルを編集します: vi〜 /。vimrc

  2. 次のオプションを追加します: syntax on

  3. ファイルを保存して閉じます

  4. vimコマンドを実行してテストします: vim foo.sh

  1. 好きな配色を見つけて、それを使用します。私が使用しているスキーム:私が使用しているスキーム

コメント

  • 外部ソースへのリンクを使用する場合は、”リンクのコンテキストを提供する”部分を確認する必要があります(重要な部分を引用)ガイドの関連部分の概要: unix.stackexchange.com/help/how-to-answer

回答

bashを選択する場合は、 oh-my-bash をお勧めします。 zshを選択する場合は、 oh-my-zsh をお勧めします。どちらも端末の色付けと異なる出力をサポートしています。

回答

最近の出版物を謙虚に宣伝したい of taまたは textattr 、ライブラリおよびコマンドラインツールこれは、人間が読める仕様をANSIエスケープコードに変換することで、プログラムの端末出力を美しくするための色と属性の追加を容易にすることを目的としています。

例:

echo "The Git repo $(ta yellow)${CUR_REPO}$(ta off) is $(ta green)up-to-date$(ta off)"

またはさらに短い:

echo "The Git repo $(ta y)${CUR_REPO}$(ta f) is $(ta g)up-to-date$(ta f)"

または代替:

tawrite "The Git repo " @y ${CUR_REPO} @f " is " @g up-to-date @f "\n"

次のようになります:

ここに画像の説明を入力

現在、このライブラリは、お気に入りのシェルからのコマンドラインでの使用を除いて、C、C ++、D、Pythonの4つの言語で使用できます。 。

他のプログラムの出力を自動的に色付けするわけではないことに注意してください。これは、hではなく支援するユーティリティです。アブストラクトコードを覚えておく必要があります。わかりやすい色の名前または覚えやすい rgb cmyk w(hite)(of)f のみを使用する必要があります。略語。

詳細については、 textattr repo をご覧ください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です