web-dev-qa-db-ja.com

Linuxでエコーの出力色を変更する方法

Echoコマンドを使って端末にテキストを印刷しようとしています。

テキストを赤い色で印刷したいどうやってやるの?

1399
satheesh.droid

あなたはこれらの ANSIエスケープコードを使うことができます

Black        0;30     Dark Gray     1;30
Red          0;31     Light Red     1;31
Green        0;32     Light Green   1;32
Brown/Orange 0;33     Yellow        1;33
Blue         0;34     Light Blue    1;34
Purple       0;35     Light Purple  1;35
Cyan         0;36     Light Cyan    1;36
Light Gray   0;37     White         1;37

そして、あなたのスクリプトでこのようにそれらを使用してください:

#    .---------- constant part!
#    vvvv vvvv-- the code from above
RED='\033[0;31m'
NC='\033[0m' # No Color
printf "I ${RED}love${NC} Stack Overflow\n"

これはloveを赤で表示します。

@ james-limのコメントから、echoコマンドを使用している場合は、バックスラッシュのエスケープを許可するために-eフラグを必ず使用してください

# Continued from above example
echo -e "I ${RED}love${NC} Stack Overflow"

(空の行を追加したいのでなければ、echoを使うときは"\n"を追加しないでください)

1885
Tobias

あなたはすごいtputコマンド( Ignacioの答え で提案されています)を使ってあらゆる種類のもののための端末制御コードを生成することができます。


使用法

特定のtputサブコマンドについては後で説明します。

直接

一連のコマンドの一部としてtputを呼び出します。

tput setaf 1; echo "this is red text"

tputがエラーになってもテキストは表示されるので、;の代わりに&&を使用してください。

シェル変数

別の選択肢はシェル変数を使用することです。

red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`
echo "${red}red text ${green}green text${reset}"

tputは、端末によって特別な意味を持つと解釈される文字シーケンスを生成します。彼らは自分自身を表示されません。それでもファイルに保存することも、端末以外のプログラムによる入力として処理することもできます。

コマンド置換

コマンド置換 を使用してtputの出力をecho文字列に直接挿入する方が便利かもしれません。

echo "$(tput setaf 1)Red text $(tput setab 7)and white background$(tput sgr 0)"

上記のコマンドはUbuntuでこれを生成します。

Screenshot of colour terminal text


前景色と背景色のコマンド

tput setab [1-7] # Set the background colour using ANSI escape
tput setaf [1-7] # Set the foreground colour using ANSI escape

色は次のとおりです。

Num  Colour    #define         R G B

0    black     COLOR_BLACK     0,0,0
1    red       COLOR_RED       1,0,0
2    green     COLOR_GREEN     0,1,0
3    yellow    COLOR_YELLOW    1,1,0
4    blue      COLOR_BLUE      0,0,1
5    Magenta   COLOR_Magenta   1,0,1
6    cyan      COLOR_CYAN      0,1,1
7    white     COLOR_WHITE     1,1,1

ANSI以外のバージョンの色設定関数(setbの代わりにsetab、およびsetfの代わりにsetaf)もありますが、ここでは示していません。

テキストモードのコマンド

tput bold    # Select bold mode
tput dim     # Select dim (half-bright) mode
tput smul    # Enable underline mode
tput rmul    # Disable underline mode
tput rev     # Turn on reverse video mode
tput smso    # Enter standout (bold) mode
tput rmso    # Exit standout mode

カーソル移動コマンド

tput cup Y X # Move cursor to screen postion X,Y (top left is 0,0)
tput cuf N   # Move N characters forward (right)
tput cub N   # Move N characters back (left)
tput cuu N   # Move N lines up
tput ll      # Move to last line, first column (if no cup)
tput sc      # Save the cursor position
tput rc      # Restore the cursor position
tput lines   # Output the number of lines of the terminal
tput cols    # Output the number of columns of the terminal

コマンドの消去と挿入

tput ech N   # Erase N characters
tput clear   # Clear screen and move the cursor to 0,0
tput el 1    # Clear to beginning of line
tput el      # Clear to end of line
tput ed      # Clear to end of screen
tput ich N   # Insert N characters (moves rest of line forward!)
tput il N    # Insert N lines

その他のコマンド

tput sgr0    # Reset text format to the terminal's default
tput bel     # Play a bell

compiz wobbly windows を指定すると、belコマンドを実行すると端末が一瞬揺れてユーザーの注意を引くことができます。


スクリプト

tputは、1行に1つのコマンドを含むスクリプトを受け付けます。これらのスクリプトは、tputが終了する前に順番に実行されます。

複数行の文字列をエコーし​​てパイプ処理することで一時ファイルを避けます。

echo -e "setf 7\nsetb 1" | tput -S  # set fg white and bg red

また見なさい

  • man 1 tput を参照してください。
  • コマンドの完全なリストとこれらのオプションの詳細については man 5 terminfo を参照してください。 (対応するtputコマンドは、81行目から始まる巨大テーブルのCap-name列にリストされています。)
810
Drew Noakes

あなたが使用できるいくつかの変数:

# Reset
Color_Off='\033[0m'       # Text Reset

# Regular Colors
Black='\033[0;30m'        # Black
Red='\033[0;31m'          # Red
Green='\033[0;32m'        # Green
Yellow='\033[0;33m'       # Yellow
Blue='\033[0;34m'         # Blue
Purple='\033[0;35m'       # Purple
Cyan='\033[0;36m'         # Cyan
White='\033[0;37m'        # White

# Bold
BBlack='\033[1;30m'       # Black
BRed='\033[1;31m'         # Red
BGreen='\033[1;32m'       # Green
BYellow='\033[1;33m'      # Yellow
BBlue='\033[1;34m'        # Blue
BPurple='\033[1;35m'      # Purple
BCyan='\033[1;36m'        # Cyan
BWhite='\033[1;37m'       # White

# Underline
UBlack='\033[4;30m'       # Black
URed='\033[4;31m'         # Red
UGreen='\033[4;32m'       # Green
UYellow='\033[4;33m'      # Yellow
UBlue='\033[4;34m'        # Blue
UPurple='\033[4;35m'      # Purple
UCyan='\033[4;36m'        # Cyan
UWhite='\033[4;37m'       # White

# Background
On_Black='\033[40m'       # Black
On_Red='\033[41m'         # Red
On_Green='\033[42m'       # Green
On_Yellow='\033[43m'      # Yellow
On_Blue='\033[44m'        # Blue
On_Purple='\033[45m'      # Purple
On_Cyan='\033[46m'        # Cyan
On_White='\033[47m'       # White

# High Intensity
IBlack='\033[0;90m'       # Black
IRed='\033[0;91m'         # Red
IGreen='\033[0;92m'       # Green
IYellow='\033[0;93m'      # Yellow
IBlue='\033[0;94m'        # Blue
IPurple='\033[0;95m'      # Purple
ICyan='\033[0;96m'        # Cyan
IWhite='\033[0;97m'       # White

# Bold High Intensity
BIBlack='\033[1;90m'      # Black
BIRed='\033[1;91m'        # Red
BIGreen='\033[1;92m'      # Green
BIYellow='\033[1;93m'     # Yellow
BIBlue='\033[1;94m'       # Blue
BIPurple='\033[1;95m'     # Purple
BICyan='\033[1;96m'       # Cyan
BIWhite='\033[1;97m'      # White

# High Intensity backgrounds
On_IBlack='\033[0;100m'   # Black
On_IRed='\033[0;101m'     # Red
On_IGreen='\033[0;102m'   # Green
On_IYellow='\033[0;103m'  # Yellow
On_IBlue='\033[0;104m'    # Blue
On_IPurple='\033[0;105m'  # Purple
On_ICyan='\033[0;106m'    # Cyan
On_IWhite='\033[0;107m'   # White

bashhex8進数)のエスケープ文字)

|       | bash  | hex    | octal   | NOTE                         |
|-------+-------+--------+---------+------------------------------|
| start | \e    | \x1b   | \033    |                              |
| start | \E    | \x1B   | -       | x cannot be capital          |
| end   | \e[0m | \x1m0m | \033[0m |                              |
| end   | \e[m  | \x1b[m | \033[m  | 0 is appended if you omit it |
|       |       |        |         |                              |

短い例:

| color       | bash         | hex            | octal          | NOTE                                  |
|-------------+--------------+----------------+----------------+---------------------------------------|
| start green | \e[32m<text> | \x1b[32m<text> | \033[32m<text> | m is NOT optional                     |
| reset       | <text>\e[0m  | <text>\1xb[0m  | <text>\033[om  | o is optional (do it as best practice |
|             |              |                |                |                                       |

bashの例外:

あなたの特別なbash変数でこれらのコードを使うつもりならば

  • PS0
  • PS1
  • PS2(=これはプロンプト用です)
  • PS4

bash がそれらを正しく解釈できるように、余分なエスケープ文字を追加する必要があります。これで余分なエスケープ文字を追加しなくても機能しますが、履歴の検索にCtrl + rを使用すると問題が発生します。

bashの例外ルール

最初のANSIコードの前に\[を追加し、最後のANSIコードの後に​​\]を追加する必要があります。
例:
通常の使用方法では:\033[32mThis is in green\033[0m
PS0/1/2/4の場合は:\[\033[32m\]This is in green\[\033[m\]

\[は、印刷不可文字)のシーケンスの開始を表します。
\]は、印刷不可文字)のシーケンスの終わりを表します。

ヒント:暗記するには、まず\[\]を追加してから、それらの間にANSIコードを挿入します。
- \[start-ANSI-code\]
- \[end-ANSI-code\]

カラーシーケンスの種類:

  1. 3/4ビット
  2. 8ビット
  3. 24ビット

これらの色に飛び込む前に、これらのコードで4つのモードについて知っておくべきです:

1.カラーモード

テキストではなく色のスタイルを変更します。たとえば、色を明るくしたり暗くしたりします。

  • 0 reset
  • 1;は通常より軽い
  • 2;が通常より暗い

このモードは広くはサポートされていません。 Gnome-Terminalで完全にサポートされています。

2.テキストモード

このモードは色ではなくテキストのスタイルを変更するためのものです。

  • 3;イタリック
  • 4;下線
  • 5;の点滅(遅い)
  • 6;の点滅(速い)
  • 7; reverse
  • 8; hide
  • 9;クロスアウト

そしてほぼサポートされています。
例えば、KDE-Konsoleは5;をサポートしますがGnome-Terminalはサポートしません、そしてGnomeは8;をサポートしますがKDEはサポートしません。

3.前景モード

このモードは前景を色付けするためのものです。

4.バックグラウンドモード

このモードは背景を色付けするためのものです。

以下の表は3/4 bitANSIカラーのバージョン)の概要を示しています

|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| color-mode | octal    | hex     | bash  | description      | example (= in octal)         | NOTE                                 |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|          0 | \033[0m  | \x1b[0m | \e[0m | reset any affect | echo -e "\033[0m"            | 0m equals to m                       |
|          1 | \033[1m  |         |       | light (= bright) | echo -e "\033[1m####\033[m"  | -                                    |
|          2 | \033[2m  |         |       | dark (= fade)    | echo -e "\033[2m####\033[m"  | -                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|  text-mode | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|          3 | \033[3m  |         |       | italic           | echo -e "\033[3m####\033[m"  |                                      |
|          4 | \033[4m  |         |       | underline        | echo -e "\033[4m####\033[m"  |                                      |
|          5 | \033[5m  |         |       | blink (slow)     | echo -e "\033[3m####\033[m"  |                                      |
|          6 | \033[6m  |         |       | blink (fast)     | ?                            | not wildly support                   |
|          7 | \003[7m  |         |       | reverse          | echo -e "\033[7m####\033[m"  | it affects the background/foreground |
|          8 | \033[8m  |         |       | hide             | echo -e "\033[8m####\033[m"  | it affects the background/foreground |
|          9 | \033[9m  |         |       | cross            | echo -e "\033[9m####\033[m"  |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| foreground | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         30 | \033[30m |         |       | black            | echo -e "\033[30m####\033[m" |                                      |
|         31 | \033[31m |         |       | red              | echo -e "\033[31m####\033[m" |                                      |
|         32 | \033[32m |         |       | green            | echo -e "\033[32m####\033[m" |                                      |
|         33 | \033[32m |         |       | yellow           | echo -e "\033[33m####\033[m" |                                      |
|         34 | \033[32m |         |       | blue             | echo -e "\033[34m####\033[m" |                                      |
|         35 | \033[32m |         |       | purple           | echo -e "\033[35m####\033[m" | real name: Magenta = reddish-purple  |
|         36 | \033[32m |         |       | cyan             | echo -e "\033[36m####\033[m" |                                      |
|         37 | \033[32m |         |       | white            | echo -e "\033[37m####\033[m" |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         38 | 8/24     |                    This is for special use of 8-bit or 24-bit                                            |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| background | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         40 | \033[40m |         |       | black            | echo -e "\033[40m####\033[m" |                                      |
|         41 | \033[41m |         |       | red              | echo -e "\033[41m####\033[m" |                                      |
|         42 | \033[42m |         |       | green            | echo -e "\033[42m####\033[m" |                                      |
|         43 | \033[43m |         |       | yellow           | echo -e "\033[43m####\033[m" |                                      |
|         44 | \033[44m |         |       | blue             | echo -e "\033[44m####\033[m" |                                      |
|         45 | \033[45m |         |       | purple           | echo -e "\033[45m####\033[m" | real name: Magenta = reddish-purple  |
|         46 | \033[46m |         |       | cyan             | echo -e "\033[46m####\033[m" |                                      |
|         47 | \033[47m |         |       | white            | echo -e "\033[47m####\033[m" |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         48 | 8/24     |                    This is for special use of 8-bit or 24-bit                                            |                                                                                       |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|

以下の表は8ビットANSIカラーのバージョン)の概要を示しています

|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
| foreground | octal     | hex       | bash    | description      | example                            | NOTE                    |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
|        0-7 | \033[38;5 | \x1b[38;5 | \e[38;5 | standard. normal | echo -e '\033[38;5;1m####\033[m'   |                         |
|       8-15 |           |           |         | standard. light  | echo -e '\033[38;5;9m####\033[m'   |                         |
|     16-231 |           |           |         | more resolution  | echo -e '\033[38;5;45m####\033[m'  | has no specific pattern |
|    232-255 |           |           |         |                  | echo -e '\033[38;5;242m####\033[m' | from black to white     |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
| foreground | octal     | hex       | bash    | description      | example                            | NOTE                    |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
|        0-7 |           |           |         | standard. normal | echo -e '\033[48;5;1m####\033[m'   |                         |
|       8-15 |           |           |         | standard. light  | echo -e '\033[48;5;9m####\033[m'   |                         |
|     16-231 |           |           |         | more resolution  | echo -e '\033[48;5;45m####\033[m'  |                         |
|    232-255 |           |           |         |                  | echo -e '\033[48;5;242m####\033[m' | from black to white     |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|

8ビット高速テスト
for code in {0..255}; do echo -e "\e[38;05;${code}m $code: Test"; done

下の表は24ビットANSIカラーのバージョン)の概要を示しています

|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
| foreground | octal     | hex       | bash    | description | example                                  | NOTE            |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | R = red     | echo -e '\033[38;2;255;0;02m####\033[m'  | R=255, G=0, B=0 |
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | G = green   | echo -e '\033[38;2;;0;255;02m####\033[m' | R=0, G=255, B=0 |
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | B = blue    | echo -e '\033[38;2;0;0;2552m####\033[m'  | R=0, G=0, B=255 |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
| background | octal     | hex       | bash    | description | example                                  | NOTE            |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | R = red     | echo -e '\033[48;2;255;0;02m####\033[m'  | R=255, G=0, B=0 |
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | G = green   | echo -e '\033[48;2;;0;255;02m####\033[m' | R=0, G=255, B=0 |
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | B = blue    | echo -e '\033[48;2;0;0;2552m####\033[m'  | R=0, G=0, B=255 |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|

いくつかのスクリーンショット

.gif内の前景の8ビット要約

foreground.gif

.gif内のバックグラウンド8ビット要約

background.gif

カラーサマリーとその値

enter image description here enter image description here enter image description here enter image description here

KDE端末でのblinking

KDE-blinking

簡単なCコード。

cecho_screenshot

これらの色を扱うために私が開発したより高度なツール:
bline


カラーモード撮影

fade-normal-bright

テキストモード撮影

only-text-mode

結合はOKです

combine

もっと撮影


上級ユーザーおよびプログラマーのためのヒントとコツ:

これらのコードをプログラミング言語で使用できますか?

はい、できます。 bashcc ++dPerlpython の経験がある

彼らはプログラムの速度を遅くしていますか?

違うと思う。

Windowsでこれらを使用できますか?

3/4ビットはい、gccを使用してコードをコンパイルした場合
Win-7のスクリーンショット

コードの長さを計算する方法

\033[ = 2、その他の部分1

これらのコードはどこで使用できますか?

ttyインタプリタがあるところならどこでも
xtermgnome-terminalkde-terminalmysql-client-CLIなど。
例えば、あなたがmysqlであなたの出力を色付けしたいのなら、Perlを使うことができます。

#!/usr/bin/Perl -n
print "\033[1m\033[31m$1\033[36m$2\033[32m$3\033[33m$4\033[m" while /([|+-]+)|([0-9]+)|([a-zA-Z_]+)|([^\w])/g;

このコードをファイル名pcc= Perl Colorize Character)に格納してから、ファイルaを有効なPATHに配置して、好きな場所で使用します。

ls | pcc
df | pcc

mysql内で最初にそれをpagerに登録してから試してください:

[user2:db2] pager pcc
PAGER set to 'pcc'
[user2:db2] select * from table-name;

pcc

それは_(_ _は_Unicodeを処理しません。

これらのコードは色付けをするだけですか?

いいえ、彼らはたくさんの面白いことをすることができます。試してください:

echo -e '\033[2K'  # clear the screen and do not move the position

または

echo -e '\033[2J\033[u' # clear the screen and reset the position

あなたがsystem( "clear" )呼び出しの代わりにこれを使うことができるようにsystem(3)で画面をクリアしたいと思う多くの初心者がいます

それらはUnicodeで利用できますか?

はい。 \u001b

これらの色のどのバージョンが好ましいですか?

3/4-bitを使うのは簡単ですが、24-bitを使うのは非常に正確で美しいです。
html の使用経験がない場合は、ここに簡単なチュートリアルがあります。
24ビットは00000000および00000000および00000000を意味します。各8ビットは特定の色用です。
24..17はのためです 16..9は 8..1は 
だから html#FF0000という意味  そしてここにそれがあります:255;0;0
html#00FF00のは、  これはここです:0;255;0
それは理にかなっていますか?どのような色を使いたいのか、これら3つの8ビット値と組み合わせてください。


参照:
ウィキペディア
ANSIエスケープシーケンス
tldp.org
tldp.org
misc.flogisoft.com
私が覚えていないいくつかのブログ/ Webページ

593
Shakiba Moshiri

tput機能と1のパラメータでsetafを使用します。

echo "$(tput setaf 1)Hello, world$(tput sgr0)"
173
echo -e "\033[31m Hello World"

[31mはテキストの色を制御します。

  • 30-37 set foreground color
  • 40-47 sets background color

カラーコードのより完全なリストは ここで見つけることができます

文字列の末尾でテキストの色を\033[0mに戻すことをお勧めします。

109
Neo

これは カラースイッチ \033[です。 history を参照してください。

コード 1;32(ライトグリーン)、0;34(ブルー)、1;34(ライトブルー)のようなものです。

カラーシーケンスを色スイッチ\033[0mno-カラーコードで終了させます。マークアップ言語でタブを開閉するのと同じです。

  SWITCH="\033["
  NORMAL="${SWITCH}0m"
  YELLOW="${SWITCH}1;33m"
  echo "${YELLOW}hello, yellow${NORMAL}"

単純色echo関数の解法:

cecho() {
  local code="\033["
  case "$1" in
    black  | bk) color="${code}0;30m";;
    red    |  r) color="${code}1;31m";;
    green  |  g) color="${code}1;32m";;
    yellow |  y) color="${code}1;33m";;
    blue   |  b) color="${code}1;34m";;
    purple |  p) color="${code}1;35m";;
    cyan   |  c) color="${code}1;36m";;
    gray   | gr) color="${code}0;37m";;
    *) local text="$1"
  esac
  [ -z "$text" ] && local text="$color$2${code}0m"
  echo "$text"
}

cecho "Normal"
cecho y "Yellow!"
31
Jorge Bucaran

1つのechoに対してのみ色を変えるためのきちんとした方法はそのような関数を定義することです:

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

または、 Drewの答え に記載されているカラーコードを直接使用することもできます。

coloredEcho "This text is green" 2
27
Alireza Mirian

カラーコードを計算するにはtputを使います。 ANSIエスケープコード(赤の場合は\E[31;1m)は、移植性が低いため使用しないでください。例えばOS X上のBashはそれをサポートしていません。

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`

BOLD=`tput bold`
RESET=`tput sgr0`

echo -e "hello ${RED}some red text${RESET} world"
20
Wilfred Hughes

この質問は繰り返し答えられています:-)しかし、そうではないのです。

最初のtputの使用は、echo -Eを介してASCIIコードを手動で挿入するよりも、現代の環境で移植性があります。

これが簡単なbash関数です。

 say() {
     echo "$@" | sed \
             -e "s/\(\(@\(red\|green\|yellow\|blue\|Magenta\|cyan\|white\|reset\|b\|u\)\)\+\)[[]\{2\}\(.*\)[]]\{2\}/\1\4@reset/g" \
             -e "s/@red/$(tput setaf 1)/g" \
             -e "s/@green/$(tput setaf 2)/g" \
             -e "s/@yellow/$(tput setaf 3)/g" \
             -e "s/@blue/$(tput setaf 4)/g" \
             -e "s/@Magenta/$(tput setaf 5)/g" \
             -e "s/@cyan/$(tput setaf 6)/g" \
             -e "s/@white/$(tput setaf 7)/g" \
             -e "s/@reset/$(tput sgr0)/g" \
             -e "s/@b/$(tput bold)/g" \
             -e "s/@u/$(tput sgr 0 1)/g"
  }

今すぐ使用することができます:

 say @b@green[[Success]] 

取得するため:

Bold-Green Success

tputの移植性に関する注意

1986年9月に初めてtput(1)ソースコードがアップロードされました

tput(1)は1990年代にX/Open cursesのセマンティクスで利用可能になりました(1997年の標準は以下に述べるセマンティクスを持ちます)。

だから、それはいたるところにある( かなり )。

18
Ahmed Masud

私はすべての解決策の中で良い漁獲量を統合したところで終わりました:

cecho(){
    RED="\033[0;31m"
    GREEN='\033[0;32m'
    YELLOW='\033[1;33m'
    # ... ADD MORE COLORS
    NC='\033[0m' # No Color

    printf "${!1}${2} ${NC}\n"
}

そして、あなたはただそれを次のように呼ぶことができます。

cecho "RED" "Helloworld"
15
Andrew Naguib

この回答に @ k-five に感謝します

declare -A colors
#curl www.bunlongheng.com/code/colors.png

# Reset
colors[Color_Off]='\033[0m'       # Text Reset

# Regular Colors
colors[Black]='\033[0;30m'        # Black
colors[Red]='\033[0;31m'          # Red
colors[Green]='\033[0;32m'        # Green
colors[Yellow]='\033[0;33m'       # Yellow
colors[Blue]='\033[0;34m'         # Blue
colors[Purple]='\033[0;35m'       # Purple
colors[Cyan]='\033[0;36m'         # Cyan
colors[White]='\033[0;37m'        # White

# Bold
colors[BBlack]='\033[1;30m'       # Black
colors[BRed]='\033[1;31m'         # Red
colors[BGreen]='\033[1;32m'       # Green
colors[BYellow]='\033[1;33m'      # Yellow
colors[BBlue]='\033[1;34m'        # Blue
colors[BPurple]='\033[1;35m'      # Purple
colors[BCyan]='\033[1;36m'        # Cyan
colors[BWhite]='\033[1;37m'       # White

# Underline
colors[UBlack]='\033[4;30m'       # Black
colors[URed]='\033[4;31m'         # Red
colors[UGreen]='\033[4;32m'       # Green
colors[UYellow]='\033[4;33m'      # Yellow
colors[UBlue]='\033[4;34m'        # Blue
colors[UPurple]='\033[4;35m'      # Purple
colors[UCyan]='\033[4;36m'        # Cyan
colors[UWhite]='\033[4;37m'       # White

# Background
colors[On_Black]='\033[40m'       # Black
colors[On_Red]='\033[41m'         # Red
colors[On_Green]='\033[42m'       # Green
colors[On_Yellow]='\033[43m'      # Yellow
colors[On_Blue]='\033[44m'        # Blue
colors[On_Purple]='\033[45m'      # Purple
colors[On_Cyan]='\033[46m'        # Cyan
colors[On_White]='\033[47m'       # White

# High Intensity
colors[IBlack]='\033[0;90m'       # Black
colors[IRed]='\033[0;91m'         # Red
colors[IGreen]='\033[0;92m'       # Green
colors[IYellow]='\033[0;93m'      # Yellow
colors[IBlue]='\033[0;94m'        # Blue
colors[IPurple]='\033[0;95m'      # Purple
colors[ICyan]='\033[0;96m'        # Cyan
colors[IWhite]='\033[0;97m'       # White

# Bold High Intensity
colors[BIBlack]='\033[1;90m'      # Black
colors[BIRed]='\033[1;91m'        # Red
colors[BIGreen]='\033[1;92m'      # Green
colors[BIYellow]='\033[1;93m'     # Yellow
colors[BIBlue]='\033[1;94m'       # Blue
colors[BIPurple]='\033[1;95m'     # Purple
colors[BICyan]='\033[1;96m'       # Cyan
colors[BIWhite]='\033[1;97m'      # White

# High Intensity backgrounds
colors[On_IBlack]='\033[0;100m'   # Black
colors[On_IRed]='\033[0;101m'     # Red
colors[On_IGreen]='\033[0;102m'   # Green
colors[On_IYellow]='\033[0;103m'  # Yellow
colors[On_IBlue]='\033[0;104m'    # Blue
colors[On_IPurple]='\033[0;105m'  # Purple
colors[On_ICyan]='\033[0;106m'    # Cyan
colors[On_IWhite]='\033[0;107m'   # White


color=${colors[$input_color]}
white=${colors[White]}
# echo $white



for i in "${!colors[@]}"
do
  echo -e "$i = ${colors[$i]}I love you$white"
done

結果

enter image description here

これを願っています image あなたのバッシュのためにあなたの色を選ぶのを手伝ってください:D

13
kyo

これらのコードは私のUbuntuボックスで動作します。

enter image description here

echo -e "\x1B[31m foobar \x1B[0m"
echo -e "\x1B[32m foobar \x1B[0m"
echo -e "\x1B[96m foobar \x1B[0m"
echo -e "\x1B[01;96m foobar \x1B[0m"
echo -e "\x1B[01;95m foobar \x1B[0m"
echo -e "\x1B[01;94m foobar \x1B[0m"
echo -e "\x1B[01;93m foobar \x1B[0m"
echo -e "\x1B[01;91m foobar \x1B[0m"
echo -e "\x1B[01;90m foobar \x1B[0m"
echo -e "\x1B[01;89m foobar \x1B[0m"
echo -e "\x1B[01;36m foobar \x1B[0m"

これは、文字a b c dをすべて異なる色で印刷します。

echo -e "\x1B[0;93m a \x1B[0m b \x1B[0;92m c \x1B[0;93m d \x1B[0;94m"

ループの場合:

for (( i = 0; i < 17; i++ )); 
do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; 
done

enter image description here

11
Eric Leschinski

読みやすくするために

コードの 読みやすさ を改善したい場合は、最初に文字列をechoにし、次にsedを使用して後で色を追加することができます。

echo 'Hello World!' | sed $'s/World/\e[1m&\e[0m/' 
10
Ooker

私のお気に入りの答えはこれまでのところcolorEchoです。

別のオプションを投稿するためだけに、この小さなツールxcolをチェックすることができます。

https://ownyourbits.com/2017/01/23/colorize-your-stdout-with-xcol/

grepのようにそれを使うと、引数ごとに標準色を異なる色で色付けします。例えば、

Sudo netstat -putan | xcol httpd sshd dnsmasq pulseaudio conky tor Telegram firefox "[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" ":[[:digit:]]+" "tcp." "udp." LISTEN ESTABLISHED TIME_WAIT

xcol example

Sedが受け付けるどんな正規表現も受け入れます。

このツールは以下の定義を使用します

#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}"
8
nachoparker

この答え を拡張するために、/私たちを怠惰にするために:

function echocolor() { # $1 = string
    COLOR='\033[1;33m'
    NC='\033[0m'
    printf "${COLOR}$1${NC}\n"
}

echo "This won't be colored"
echocolor "This will be colorful"
6
Mahn

ANSIコード7 反転ビデオ の有用性に誰も気付いていません。

前景色と背景色を入れ替えることで、どの端末スキームの色、白黒の背景、またはその他の空想のパレットでも読みやすくなります。

例、どこでも機能する赤い背景の場合:

echo -e "\033[31;7mHello world\e[0m";

これは、端末の組み込みスキームを変更したときの外観です。

enter image description here

これはgifに使用されるループスクリプトです。

for i in {30..49};do echo -e "\033[$i;7mReversed color code $i\e[0m Hello world!";done

https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters を参照してください。

5
Cryptopat

あなたは間違いなく生のANSI制御シーケンスの上にtputを使うべきです。

さまざまな端末制御言語が多数あるため、通常、システムには中間通信層があります。実際のコードは、現在検出されている端末タイプについてデータベースで検索され、標準化された要求をAPIまたは(シェルから)コマンドに渡します。

これらのコマンドの1つがtputです。 tputは、ケーパビリティ名と呼ばれる頭字語と適切なパラメータを受け入れ、terminfoデータベースで検出された端末の正しいエスケープシーケンスを調べ、正しいコードを出力します(端末は理解できる)。

http://wiki.bash-hackers.org/scripting/terminalcodes から

そうは言っても、私は bash-tint と呼ばれる小さなヘルパーライブラリを書きました。

例:tint "white(Cyan(T)Magenta(I)Yellow(N)Black(T)) is bold(really) easy to use."

次のような結果になります。 enter image description here

4
ArtBIT

私は Swag と書いています。

あなたはただできる

pip install Swag

これで、すべてのエスケープコマンドをtxtファイルとして指定のインストール先にインストールできます。

Swag install -d <colorsdir>

またはより簡単に:

Swag install

これは~/.colorsに色をインストールします。

どちらを使ってもいい:

echo $(cat ~/.colors/blue.txt) This will be blue

あるいはこのようにして、私は実際にもっとおもしろいと思う。

Swag print -c red -t underline "I will turn red and be underlined"

asciinema でチェックしてください。

そしてこれが私がすべての組み合わせを見て、どれがクールであるかを決定するために使用していたものです:

for (( i = 0; i < 8; i++ )); do
    for (( j = 0; j < 8; j++ )); do
        printf "$(tput setab $i)$(tput setaf $j)(b=$i, f=$j)$(tput sgr0)\n"
    done
done
3
isntn

あなたが作ることができる異なる色でメッセージ出力を表示するには:

echo -e "\033[31;1mYour Message\033[0m"

-ブラック0; 30ダークグレー1; 30

-赤0; 31薄赤1; 31

-緑0; 32薄緑1; 32

-ブラウン/オレンジ0; 33イエロー1; 33

-ブルー0; 34ライトブルー1; 34

-パープル0; 35ライトパープル1; 35

-シアン0; 36ライトシアン1; 36

-ライトグレー0; 37ホワイト1; 37

1

これは、MacOSターミナルでPS1にカラーリングを設定するために機能する実装とそうでない実装です。

2つの実装があります。1つはエコーに依存し、もう1つは地獄が崩れることなく動的にメソッドを呼び出すためにprintfに依存しています。

これは単なるスタートにすぎませんが、堅牢で、端末がちらつくことはありません。現在gitブランチをサポートしていますが、最終的に多くのことを行うために拡張できます。

ここにあります:

https://github.com/momomo/opensource/blob/master/momomo.com.Shell.style.sh

コピーして貼り付けるだけで機能するはずです。依存関係はありません。

0
momomo

これは、私が最近まとめた簡単な小さなスクリプトです。これは、「トイレ」を使用する代わりに、パイプ入力を色付けします。

File: color.bsh

#!/usr/bin/env bash 

## A.M.Danischewski 2015+(c) Free - for (all (uses and 
## modifications)) - except you must keep this notice intact. 

declare INPUT_TXT=""
declare    ADD_LF="\n" 
declare -i DONE=0
declare -r COLOR_NUMBER="${1:-247}"
declare -r ASCII_FG="\\033[38;05;"
declare -r COLOR_OUT="${ASCII_FG}${COLOR_NUMBER}m"

function show_colors() { 
   ## perhaps will add bg 48 to first loop eventually 
 for fgbg in 38; do for color in {0..256} ; do 
 echo -en "\\033[${fgbg};5;${color}m ${color}\t\\033[0m"; 
 (($((${color}+1))%10==0)) && echo; done; echo; done
} 

if [[ ! $# -eq 1 || ${1} =~ ^-. ]]; then 
  show_colors 
  echo " Usage: ${0##*/} <color fg>" 
  echo "  E.g. echo \"Hello world!\" | figlet | ${0##*/} 54" 
else  
 while IFS= read -r PIPED_INPUT || { DONE=1; ADD_LF=""; }; do 
  PIPED_INPUT=$(sed 's#\\#\\\\#g' <<< "${PIPED_INPUT}")
  INPUT_TXT="${INPUT_TXT}${PIPED_INPUT}${ADD_LF}"
  ((${DONE})) && break; 
 done
 echo -en "${COLOR_OUT}${INPUT_TXT}\\033[00m"
fi 

それからそれを赤の色(196)で呼び出します。
$> echo "text you want colored red" | color.bsh 196

0
user4401178

参照する:

echo_red(){
    echo -e "\e[1;31m$1\e[0m"
}
echo_green(){
    echo -e "\e[1;32m$1\e[0m"
}
echo_yellow(){
    echo -e "\e[1;33m$1\e[0m"
}
echo_blue(){
    echo -e "\e[1;34m$1\e[0m"
}
0
Mike