ほとんどの時間をUnix環境での作業と、ターミナルエミュレーターの使用に費やしています。色を使用すると出力がより便利で直感的になるため、コマンドラインで色を使用しようとしています。
端末環境に色を追加するには、どのようなオプションがありますか?どんなトリックを使いますか?どのような落とし穴に遭遇しましたか?
残念ながら、色のサポートは端末の種類、OS、TERM設定、ユーティリティ、バグのある実装などによって異なります。
セットアップのヒントをいくつか紹介します。 、多くの実験の後:
- ほとんどのホスト(すべてではない)でサポートされている
TERM=xterm-color
を設定する傾向があります。 - さまざまなホスト、さまざまなOSバージョンなどで作業しています。macOSX、Ubuntu Linux、RHEL / CentOS / Scientific Linux、FreeBSDのすべてを使用しています。可能であれば、物事をシンプルで一般的なものにしようとしています。
- GNU
screen
を使用して多くの作業を行っています。これにより、さらに楽しいレイヤーが追加されます。 - 多くのOSは
dircolors
のようなものをデフォルトで設定しますが、100の異なるホストでこれを変更したくありません。だから私はデフォルトに固執しようとします。代わりに、端末の色設定を微調整します。 -
一部の Unixコマンド(
ls
、grep
、less
、vim
)および Bashプロンプト。これらのコマンドは、標準の「 ANSIエスケープシーケンス」を使用しているようです。例:alias less="less --RAW-CONTROL-CHARS" export LS_OPTS="--color=auto" alias ls="ls ${LS_OPTS}"
.bashrc
を投稿し、自分の質問に答えますJeopardy Style 。
コメント
回答
ここにありますできることがいくつかあります:
エディター+コード
多くのエディターには構文があります強調表示のサポート。 vim
とemacs
ではデフォルトでオンになっています。 で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
回答
grep
とls
についてはすでに説明しました。もっと多くの色が必要な場合は、汎用Coloriser を確認してください。 、当初の目的はログファイルの色付けでしたが、箱から出してすぐにping
、traceroute
、gcc
、make
、netstat
、diff
、last
、ldap
、およびcvs
。
簡単に拡張できます。正規表現を知っています。リストにps
とnmap
を追加しました(grc
これら2つのツールの.confファイルを共有できてうれしいです)
(ところで、synaptic
、
、そして同様にあなたはより良い検索をするかもしれませんfor “grc”)
コメント
-
grc
がps
デフォルトで。 ‘の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
コメント
- スクリーンショットに賛成する
-
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
コメント
- またはZSHを使用する場合は、Phil Gold ‘の aperiodic.net/phil/prompt のプロンプトは芸術作品です。
回答
ここでまだ述べられていないこと:
gccを使用してコンパイルの出力を色付けする、JohannesSchlüterによるcolorgccがあります
ログを色付けするには、マルチテールがあります
stdoutを色付けするには、 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形式の出力:
これには、-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
その後、スプルースを作成できますup with:
python -m unittest discover -v 2>&1 | colout "(.*ERROR$)|(.*FAIL$)|(\(.*\))" red,yellow,black bold
正規表現に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
回答
Macの場合、指定されたとおりに以下を使用できますここ
if [ "$TERM" = xterm ]; then TERM=xterm-256color; fi
回答
カラーラッパーを使用しています。
cwは、GNU / linuxでの一般的なUNIXベースのコマンド用の非侵入型のリアルタイムANSIカラーラッパーです。 cwは、実行中のコマンドの環境をシミュレートするように設計されているため、シェルに「du」、「df」、「ping」などと入力すると、定義に従ってリアルタイムで出力に自動的に色が付けられます。必要なカラーフォーマットを含むファイル。 cwは、ワイルドカードマッチカラーリング、トークン化カラーリング、ヘッダー/フッター、ケースシナリオカラーリング、コマンドライン依存の定義カラーリングをサポートしており、50を超える既成の定義ファイルが含まれています。
ほぼシームレスですが、インタラクティブシェルのpsは、パイプのpsと比較して異なる出力を返すことがわかりました。
回答
vim
を私のようにカラフルにしたい場合は、次の2つの手順に従うことをお勧めします。
- オンにする方法を学ぶこのリンクをたどると、この機能は次のようになります: viまたはvimで色構文の強調表示をオンにします。
リンクの主な手順:
次のコマンドを入力して〜/ .vimrcファイルを編集します: vi〜 /。vimrc
次のオプションを追加します: syntax on
ファイルを保存して閉じます
vimコマンドを実行してテストします: vim foo.sh
- 好きな配色を見つけて、それを使用します。私が使用しているスキーム:私が使用しているスキーム
コメント
- 外部ソースへのリンクを使用する場合は、”リンクのコンテキストを提供する”部分を確認する必要があります(重要な部分を引用)ガイドの関連部分の概要: 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 をご覧ください。
column -t --color
?