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


262

私はほとんどの時間を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)とバッシュプロンプト。これらのコマンドは、標準の「ANSIエスケープシーケンス」を使用しているようです。例えば:

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

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


FYI 1上の例の色のため、OSXとLinuxの違いが問題に対処(以下答える参照)のls -Gは私のアプローチであり、他にLS --color-autoです
マイケル・デュラント

1
カラムに色を付けるためのツールを見た人はいましたか?それはcolumn -t --color
トマーシュポスピシェク

回答:


121

できることは次のとおりです。

エディター+コードエディター
の多くは、構文の強調表示をサポートしています。vimそして、emacs、デフォルトではそれを持っています。で有効にnanoすることもできます。

Pygmentsをコマンドラインツールとして使用することにより、ターミナルでハイライトコードを構文することもできます。

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を生成します。

[黄色] lucas @ ubuntu:[赤]〜[通常] $

これで本当に創造的になります。アイデアとして:

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"

より本格的な体験が必要な場合は\e[8m、で始まる行を削除して、テキストを非表示にするよう端末に指示することもできます。(広くサポートされていません。)

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

また、これらの^ [sは実際のリテラル^ [sでなければなりません。bashで^ V ^ [を押すことで入力できます。つまり、Ctrl+ VCtrl+ [です。


1
最初のPS1行は次のようになりますPS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '。4番目のバックスラッシュの後に余分なxがあります。
クリス

3
エスケープを囲む必要があり\[...\]ます。そうしないと、2行目のコマンドが1行目を上書きします。PS1 = '[\ e [33; 1m] \ u @ \ h:[\ e [31m] \ W \ e [0m \ $'
yanglifu90

ザ・はls --color=always動作しません。@Michaelデュラントのアプローチは、このために優れている:ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
サイモンC.

83

私も使用します:

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_WHITE='\e[1;37m'
export COLOR_BLACK='\e[0;30m'
export COLOR_BLUE='\e[0;34m'
export COLOR_LIGHT_BLUE='\e[1;34m'
export COLOR_GREEN='\e[0;32m'
export COLOR_LIGHT_GREEN='\e[1;32m'
export COLOR_CYAN='\e[0;36m'
export COLOR_LIGHT_CYAN='\e[1;36m'
export COLOR_RED='\e[0;31m'
export COLOR_LIGHT_RED='\e[1;31m'
export COLOR_PURPLE='\e[0;35m'
export COLOR_LIGHT_PURPLE='\e[1;35m'
export COLOR_BROWN='\e[0;33m'
export COLOR_YELLOW='\e[1;33m'
export COLOR_GRAY='\e[0;30m'
export COLOR_LIGHT_GRAY='\e[0;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)は、現在のパスに関するバージョン管理情報を出力するpythonスクリプトを〜/ sbinで呼び出しています。Mercurial、Git、Svn、Cvsなどのサポートが含まれています。スクリプトの作成者はここにソースを持っています

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

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


私は上記のPS1を使用したときに私が得たラインの問題を解決するには、ここを参照してください:stackoverflow.com/questions/5087036/...
ザンダー・ダンに

プロンプト内の色のエスケープされた括弧を反映するように回答を更新しました。ありがとう!
クリス14年

1
$LSCOLORSおよび$CLICOLORBSD ls用です。GNU ls(Linux)は$LS_COLORS、異なる構文で使用します。GNUが自分の家のように感じるのでLSCOLORS=exgxfxDacxBaBaCaCaeaEa、BSDでGNUの色を模倣するために使用します。
アダム・カッツ

grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
スティーブンアルメロス

1
.bashrc変更を有効にするには、ファイルを入手する必要がある場合があります。次のコマンドで実行できます。 source /path/to/.bashrc
フランソワ

18

grepそしてls、すでにあなたがより多くの色がチェックアウトしたい場合は、言及されているジェネリックColoriserを、その当初の目的は、ログファイルを色付けすることでしたが、箱から出してすぐ、それはまた、色を付けpingtraceroutegccmakenetstatdifflastldap、とcvs

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

(ところで、、を介してインストールする場合はsynapticpacman「grc」を検索する方が幸運かもしれません)


grcpsデフォルトでサポートされるようになりました。あなたのnmap色に興味があります。grcをアップグレードするときに新しいコマンドを吸収するようにこれらすべてをエイリアス化するための私の答えも参照してください。
アダム・カッツ

きがついた。(ここで、実際に他のすべて)私のconf.nmapだgist.github.com/sygo/844982#file-conf-nmap -私はあなたが面白いconf.hexdump見つけるかもしれない、INFOSECで働く気づいた、私はまだそれを終えていませんしかし。
Sygo

@Sygoに感謝します。あなたの要点を分岐し、改訂しました。私は実際にgitでデータをコミットしたことはありません(githubの要点は言うまでもありません)、それをあなたにマージすることを提案する方法がわかりません(要点があまりにも単純化されているためだと思います)。
アダムカッツ

それは要点であり、適切なリポジトリではないため、できないと思います。私はあなたのフォークをチェックアウトしましたが、私は間違いなくあなたのバージョンを試しています。私はその16進ダンプ1がどうなるか興味があります
...-Sygo

11

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

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

PS1プロンプトの機能:

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

私の.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\]>'

使用可能な場合は色付きで、そうでない場合はエラーなし(つまりOSX)の場合:

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

1
lsOS Xでは色を使用できますが、それはを使用して行われexport CLICOLOR=1ます。
ThomasW

3
@ThomasWですが、Linuxではそうではありません:-p男は両方を使用します。
ジミー・ケイン

1
それでも、ThomasWはls、MacOS 10では色を使用できないと言うのは答えが間違っていると指摘するのが正しいです。答えは、ここのプロンプト文字列が実際に間違っているという点でも間違っています。彼らはしていない、正しくバランス\[\]、そしてこの答えをコピーし、少なくとも1人のための問題を引き起こしています
JdeBP

9

マニュアルページの色(詳細):

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

grcGeneric Colouriser)をインストールし、エイリアスに追加します。

# 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プロンプトのデモ


1
スクリーンショットへの賛成票
Green

私のPSWD()関数は以前POSIX互換でしたが、bash / zshの部分文字列処理を使用すると非常に簡単になりました。POSIXバージョンのリビジョン6を参照してください。これには多くの疑問符が含まれており、端末の幅にまったく適応できませんでした。スクリーンショットは更新しませんでしたが、80文字幅でのわずかな変更にすぎません。
アダム・カッツ

CLICOLOR=1FREEBSD 11.2では動作しません
Simon C.

1
@SimonC。– BSDシステムではなく、FreeBSDシステムでGNUユーティリティを使用している可能性があります。BSD CLICOLOR=1 lsls -G使用するのと同じことをする必要があります(ls -g古いBSDで)。動作する場合ls --color(エラーなし)、GNUのlsコマンドを使用して$CLICOLORおり、無視されます。
アダムカッツ

1
@SimonC。– ~/.bashrc変更を有効にするには、実際にロードする必要があります。source ~/.bashrc新しいbashセッションを実行または開始します(端末を起動するか、実行しますbash)。
アダムカッツ

8

太字/色付きのプロンプトを設定します。cyberciti.bizBashFAQ

# 'tput bold' will work regardless of the foreground and background colors.
# Place the tput output into variables, so they are only execd once.
bold=$(tput bold) # This could also be a color.
reset=$(tput sgr0)
export PS1="\u@\[$bold\]\h\[$reset\]:\w \$ "

また、広くサポートされており、古い環境(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

1
あなたがZSHを使用したい場合や、でフィル・ゴールドのプロンプトaperiodic.net/phil/promptは芸術作品です。
tsvallender


5

ここでまだ言われていないこと:

コンパイルの出力をgccで色付けするために、JohannesSchlüterによるcolorgccがあります。

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

標準出力を色付けするために、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}"

私はこの小さな関数coloredEchoも好きです(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

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


2
こんにちは、プロンプトパスのフラグをどのように作成しますか?私は、三角形と長方形のバーを言及していますと、感謝を終了
アルトゥル・ビエラ

ubuntu gnuターミナルでも動作しますか?
ヘル

lnavは、色分けされたログファイルを表示するための優れたツールでもあります
Cyril Chaboisseau

4

私が見た中で最も強力なコンソール機能の1つであるZSHとそのプラグインoh-my-zshをチェックすることをお勧めします。それらの1つは、端末のテーマを選択することです。これは私のテーマの例です... ttyの色はそれほど暖かくはありませんが、この写真のように同じです...どんな方法でも好きになるでしょう!

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


2
できれば、Oh-My-ZSHの提案のためにこれを支持します。ターミナルで広範囲に働くシステムエンジニアとして、また私のワークフローにzsh / oh-my-zshを採用しようとした人として、正直に言ってZSHを誰にも勧めることは決してありません。もちろん、他のシェルにちなんで名付けられたファイルにzshをシンボリックリンクして、そのシェルをエミュレートできますが、それを実行しても.bashrc、.bash_profileなどを読み取れません。また、emulate bash.zprofileまたは.zshrcに入れることはできません。ファイル。BASHの高度な機能を使用するユーザーには、多くの微妙な問題が発生します。BASHはより良いshです。
チャールズアディス

2
ZSHに用意されている、BASHよりも優れているのはコマンド補完だけですが、それでもBASHでプログラム可能です。たまにありふれたタスクを除いてシェルを使用しない人はZSHを採用すべきですが、シェルを広範囲に使用する必要がある人はそうではありません。=~オペレータは、ZSHは、配列が、私はそれを十分に持っていた約9ヶ月間ZSH / OH-マイ-ZSHを使用した後など、あなたをかむことができます処理する方法を、あなたをかむことができます。私は自分で書いたカスタムテーマを使用していたので、それをBASHに移植し、独自のgitプロンプトラインを作成しました。移植性について心配する必要がなくなりました
チャールズアディス

1
「私が見た中で最も強力なコンソール機能の1つがあります。その1つは、端末のテーマを選ぶことです。」
ジョナサンハートリー

@JonathanHartley、あなたのコメントはあなたがそれを不完全にしたように見えます。?
ワイルドカード

2
ご心配をお寄せいただきありがとうございますが、私のコメントは、私が言おうとしたすべてのことを述べています。
ジョナサンハートリー

4

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

sudo apt-get install colordiff

diff形式の出力をcolordiffにパイプします。

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

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

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

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

1
.bashrc例では、最終的に欠落しているfi、そして1行のコマンドに変換することができる:type colordiff &> /dev/null && alias diff='colordiff'
テームLeisti

3

ルートシェルと非ルートシェルを簡単に区別するためのテキスト装飾(太字)。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ですが、あなたのコードはそうではないと感じていますbash
マナトワーク

@manatwork:申し訳ありませんが、Zshであることを忘れていました。投稿を更新しました。
ミシャアレフィエフ

3

私はちょうど同じことを疑問に思いました。独自のアプローチがありますが、代替手段を探しています。

プログラム呼び出しの周りに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'

3

プロンプトを設定するために、.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プロンプトで行うと、理解できない制御シーケンスの代わりに、付きの生のプロンプトが表示されます。


2

ソース出力で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

自動色は構成可能です。

これはそれで行われた例です: ここに画像の説明を入力してください


2

コマンドの出力を着色するための優れた汎用Pythonツールは ' colout 'です

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

したがって、たとえば、テストの出力を見ている場合:

python -m unittest discover -v

いくつかのPythonユニットテストの色付けされていない出力

それからあなたはそれを小ぎれいにすることができます:

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

いくつかのPythonユニットテストのカラー出力

正規表現に3つのグループ(かっこ)があり、その後に3つの色(およびオプションで3つのスタイルがありますが、すべての色を「太字」に設定するために短縮形を使用しているため、括弧内のテキストに一致する「黒」グループを参照してください、濃い灰色で表示されます。)

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

これは一般的に非常に使いやすいので、頻繁に新しいcolout呼び出しをオンザフライで作成し、コマンドライン履歴から再利用または変更します。

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



1

カラーラッパーを使用します

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

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



0

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

  1. このリンクをたどって機能を有効にする方法をご覧ください。 。viまたはvimで色の構文の強調表示を有効にします

リンクの重要なステップ:

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

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

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

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

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

外部ソースへのリンクを使用する場合は、ガイドの関連部分の「リンクのコンテキストを提供する」部分(かなり
Gert van den Berg


0

私は謙虚に広告を掲載したいと思い、私の最近の発表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つの言語で使用できます。

他のプログラムの出力を自動的に色付けしないことに注意してください。むしろ、abstruseコードを覚えておく必要がないのに役立つユーティリティです。明らかな色名または覚えやすいrgb cmyk w(hite)(of)fのみを使用する必要があります略語。

詳細については、textattrリポジトリをご覧ください。

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