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


1740

echoコマンドを使用して端末でテキストを印刷しようとしています。

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


30
このリンクはかなり役に立ちます:misc.flogisoft.com/bash/tip_colors_and_formatting
Pithikos

私がそこであなたの質問に答えたこれを見てください:stackoverflow.com/a/48216286/3782119
Shayan Amani

回答:


2297

次の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"

"\n"空行を追加したくない場合を除いて、エコーを使用する場合は追加しないでください)


11
動作しません-出力:\e[0;31mHello Stackoverflow\e[0m
ベンハロルド

171
「-e」で試しましたか?echoバックスラッシュエスケープを有効にするよう指示します。
James Lim 2013年

142
MacOSXでは、の\x1B代わりにを使用します\e\033すべてのプラットフォームで問題ありません。
Xiao

4
antプロパティファイルでは、esacpeにUnicodeを使用します。例:red = \ u001b [0; 31m
shonky linux user

20
TPUTのために作られたmsanfordのように、ここでは「ANSI-レインボー」であるfor (( i = 30; i < 38; i++ )); do echo -e "\033[0;"$i"m Normal: (0;$i); \033[1;"$i"m Light: (1;$i)"; done
エブリマン

971

素晴らしい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でこれを生成します。

カラーターミナルテキストのスクリーンショット


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

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をグラグラ窓belコマンドは、ユーザの注意を引くために第2のターミナルウォブルになります。


スクリプト

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

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

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

こちらもご覧ください

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

13
すばらしい答えです。これは私を最も助けたものです。私が何を思っているのかと思っていた他の誰にとっても、これ$()コマンド置換です。すべてはtput af 1ありませんカラーコード列を生成しますが、コードが印字可能な文字ではありませんので、タイピングtput af 1だけでは、出力の空白行を生成します。
Chris Middleton、

5
注:CygWinを使用していて、tputインストールがない場合ncurses
Enrico

3
:TPUTも内側に読みやすい、カラフルな嫌なものの中に嫌なものを解析するためのsedの作品gist.github.com/nickboldt/fab71da10bd5169ffdfa
nickboldt


あるreset=`tput sgr0`べきだと思いますreset=`tput sgr 0`
サルパンツ

833

使用できるいくつかの変数:

# 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

それぞれbash16進数8進数のエスケープ文字:

|       | 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

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

bashの例外ルール

\[開始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 リセット
  • 1; 通常よりも軽い
  • 2; 通常より暗い

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

2.テキストモード

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

  • 3; イタリック
  • 4; 下線
  • 5; 点滅(遅い)
  • 6; 点滅(速い)
  • 7; 逆行する
  • 8; 隠す
  • 9; クロスアウト

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

3.フォアグラウンドモード

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

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

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

次の表は、ANSIカラーの3/4ビットバージョンの 概要を示しています。

|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| 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[33m |         |       | yellow           | echo -e "\033[33m####\033[m" |                                      |
|         34 | \033[34m |         |       | blue             | echo -e "\033[34m####\033[m" |                                      |
|         35 | \033[35m |         |       | purple           | echo -e "\033[35m####\033[m" | real name: magenta = reddish-purple  |
|         36 | \033[36m |         |       | cyan             | echo -e "\033[36m####\033[m" |                                      |
|         37 | \033[37m |         |       | 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                                            |                                                                                       |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|

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

|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
| 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 |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|

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

フォアグラウンド8ビットの要約 .gif

foreground.gif

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

background.gif

値と色の要約

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

blinking KDEターミナル

KDE点滅

C詳細を示す簡単なコード

cecho_screenshot

これらの色を処理するために私が開発したより高度なツール:

ブライン


カラーモードショット

フェードノーマルブライト

テキストモードショット

テキストのみモード

組み合わせOK

組み合わせる

より多くのショット


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

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

はい、できます。私は経験した

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

私は違うと思います。

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

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

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

\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です。
経験がない場合だからここに簡単なチュートリアルがあります:
24ビットは:0000000000000000を意味 し00000000ます。各8ビットは特定の色用です。
1..8のためにそしての9..16ためにそしての17..24ため
#FF0000手段とここにある:255;0;0
#00FF00手段:ここにある0;255;0
んのでメイク感覚?どの色をこれらの3つの8ビット値と組み合わせるか。


参照:
Wikipedia
ANSIエスケープシーケンス
tldp.org
tldp.org
misc.flogisoft.com
覚えていないブログ/ウェブページ


70
他の誰もこの答えに本当に驚いていませんか?
ベンジ

14
これは間違いなく名声の答えです、ありがとう。
ForeverZer0

2
@NeilGuyLindberg 8進数リテラルはありませんこのエラーはNode.jsの一部であり、eslist自体ではありません。あなたはx1B[それを排除するために使用することができます。
Shakiba Moshiri

5
この答えを賛成するために、かなり遠くまでスクロールして戻りました。
RNA

1
@ShakibaMoshiriがこのトピックに関する論文を書いたような感じxD Jokesは離れて、そのような詳細な答えを応援しています!
SH '

189

機能とパラメータtputとともに使用しsetafます1

echo "$(tput setaf 1)Hello, world$(tput sgr0)"

8
これは最良のオプションです。何TPUTが行うことは、それは、端末の情報を読んで、あなたのために正しくエスケープANSIコードをレンダリングしますです。次のようなコード\033[31mは、一部の端末でreadlineライブラリを壊します。
Tian Chen

44
単純なループで色を探索します(iより多くの色合いのためにの上限を増やします):for (( i = 0; i < 17; i++ )); do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; done
msanford '22

2
これはtputコードに関するHOWTOです:tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.html
maxywb

tput: command not found(高山)
dgallant

127
echo -e "\033[31m Hello World"

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

  • 30- 前景色を37設定します
  • 40- 背景色を47設定します

カラーコードのより完全なリストはここにあります

\033[0m文字列の最後でテキストの色をリセットすることをお勧めします。


2
echo -e "\ 033 [31mハローワールド]、[31mは色
新発売可能

36

私はすべてのソリューションで良いキャッチを統合し、次のようになりました:

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"

1
非常に実用的です。スクリプトで機能させるには、GREEN、YELLOW、NCの単一引用符を二重引用符に置き換える必要がありました。
ionescu77 2019年

1
素晴らしいソリューション!!
David Kariuki

31

こちらがカラースイッチ \033[です。歴史を見る。

カラーコード1;32(ライトグリーン)、0;34(ブルー)、1;34(ライトブルー)などです。

私たちは、色のスイッチでカラーシーケンスを終了\033[して0mなし -カラーコード。マークアップ言語でタブを開いたり閉じたりするのと同じです。

  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!"

1
この方法で最後のtext変数を変更するとtext="$color${@: 2}${code}0m"、カラーパラメータを除く行全体が色付きになります。
Shairon Toledo

@tomazahlinは、前述のように-eをエコーに追加するだけです
Artem Medvedev

28

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

-nエコーに追加する場合は、インラインカラーとして使用できますecho "Red `coloredEcho "fox" red` jumps over the lazy dog"
sobi3ch

23

tputカラーコードの計算に使用します。\E[31;1m移植性が低いため、ANSIエスケープコード(赤など)の使用は避けてください。たとえば、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"

18

この質問は何度も何度も回答されています:-)しかし、なぜそうではありませんか。

最初の使用tputは、ASCIIコードを手動で挿入するよりも現代の環境でよりポータブルです。echo -E

簡単な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]] 

取得するため:

大胆な成功

の移植性に関する注意 tput

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

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

だから、それは(かなり)ユビキタスです。


かっこいい!これを知りませんでした。の可用性について何か言えますtputか?インストールする管理者権限がないほとんどのサーバーで利用できますか?この手法が最初に「発明」された場所へのリンクはありますか?
Redsandro

3
tputは、これを行うための標準に準拠した方法であり、端末の機能を知っているユーザーから完全に独立しています。端末が特定の機能をサポートしていない場合、端末は、ねじれたエスケープコードを押し出さずに、実行可能なすべての機能に適切にダウングレードします。
Ahmed Masud 2017年

1
このメソッドは、bash行のカーソル位置に干渉するため、使用をやめました。行の終わりの前でランダムに折り返され、ホームまたは矢印キーを使用すると、行の先頭までは戻りません。不器用な手動エスケープコードに戻ると、この問題は修正されます。
Redsandro 2017年

2
@Resandro -あなたがそれを使用しているためということである$PS1なしに\[...\]非間隔部分の周り?tput文字列で引き続きBash PS1マーカーを使用します。
Toby Speight 2018年

この機能が原因のsedユーティリティでdifferenciesのMacOSXの上ではない、完全に仕事をしていること注:unix.stackexchange.com/questions/13711/...
ジェフ・

14

この回答をありがとう@ 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

結果

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

この画像があなたのバッシュの色を選ぶのに役立つことを願っています:D


これにはbash v4が必要であることに注意してください。
Synox

14

zshまたはを使用している場合bash

black() {
    echo -e "\e[30m${1}\e[0m"
}

red() {
    echo -e "\e[31m${1}\e[0m"
}

green() {
    echo -e "\e[32m${1}\e[0m"
}

yellow() {
    echo -e "\e[33m${1}\e[0m"
}

blue() {
    echo -e "\e[34m${1}\e[0m"
}

magenta() {
    echo -e "\e[35m${1}\e[0m"
}

cyan() {
    echo -e "\e[36m${1}\e[0m"
}

gray() {
    echo -e "\e[90m${1}\e[0m"
}

black 'BLACK'
red 'RED'
green 'GREEN'
yellow 'YELLOW'
blue 'BLUE'
magenta 'MAGENTA'
cyan 'CYAN'
gray 'GRAY'

オンラインで試す


14

テキストと背景の両方に24ビットRGBトゥルーカラーを使用できます。

 ESC[38;2;⟨r⟩;⟨g⟩;⟨bm  /*Foreground color*/
 ESC[48;2;⟨r⟩;⟨g⟩;⟨bm  /*Background color*/

赤いテキストと終了タグの例:

 echo -e "\e[38;2;255;0;0mHello world\e[0m"

発生器:

24ビット: 16ビットから24ビットの「トゥルーカラー」グラフィックカードが一般的になるにつれて、Xterm、KDEのKonsole、およびすべてのlibvteベースの端末(GNOME端末を含む)は、24ビットの前景色と背景色の設定をサポートし ますhttps:/ /en.wikipedia.org/wiki/ANSI_escape_code#24-bit

スクリプトで使用しても安全ですか?

はい!8ビットと16ビットのターミナルは、利用可能なパレットの範囲で色をフォールバックとして表示するだけで、最高のコントラストを維持します。


また、ANSIコード7 反転ビデオの有用性に誰も気づきませんでした。

これは、前景色と背景色を入れ替えることにより、端末スキームの色、黒または白の背景、またはその他の空想パレットで読み取り可能な状態を保ちます。

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

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

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

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

これは、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を参照してください


11

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

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

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"

これにより、abcdという文字がすべて異なる色で印刷されます。

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

forループ:

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

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


2
ちなみに、これはubuntuの特定のバージョンをインストールしているかどうかにはあまり依存しませんが、PuTTYを使用します!
urzeit 2015年

11

Shakiba Moshiriの素晴らしい答えを見つけたのは、そのトピックに関する情報を探していたときでした…アイデアが浮かびました…結局、とても使いやすい非常に使いやすい機能になりました😁
だから、共有しますve

https://github.com/ppo/bash-colors

使用法: $(c <flags>)内部AN echo -eまたはprintf

 ┌───────┬─────────────────┬──────────┐   ┌───────┬─────────────────┬──────────┐
  Code   Style            Octal        Code   Style            Octal    
 ├───────┼─────────────────┼──────────┤   ├───────┼─────────────────┼──────────┤
    -    Foreground       \033[3..       B    Bold             \033[1m  
    _    Background       \033[4..       U    Underline        \033[4m  
 ├───────┼─────────────────┼──────────┤      F    Flash/blink      \033[5m  
    k    Black            ......0m       N    Negative         \033[7m  
    r    Red              ......1m    ├───────┼─────────────────┼──────────┤
    g    Green            ......2m       L    Normal (unbold)  \033[22m 
    y    Yellow           ......3m       0    Reset            \033[0m  
    b    Blue             ......4m    └───────┴─────────────────┴──────────┘
    m    Magenta          ......5m 
    c    Cyan             ......6m 
    w    White            ......7m 
 └───────┴─────────────────┴──────────┘

例:

echo -e "$(c 0wB)Bold white$(c) and normal"
echo -e "Normal text… $(c r_yB)BOLD red text on yellow background… $(c _w)now on
  white background… $(c 0U) reset and underline… $(c) and back to normal."

10

読みやすくするために

コードの可読性を向上させたい場合はecho、最初に文字列を指定し、次に次を使用して色を追加できますsed

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

1
私はこの答えが本当に好きです!sedコマンドの$について説明してもらえますか?
Patrick

2
$ '<something>'はsedではなくbash用です。エスケープシーケンスとして\ eを処理し、「エスケープ」文字を入れるようにbashに指示します。通常、$ '\ t'や$ '\ n'のような単純な形式で、タブまたは改行文字をコマンド。
dsz

8

これまでの私のお気に入りの答えは、coloredEchoです。

別のオプションを投稿するには、この小さなツール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の例

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}"

6

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

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"

2
端末のエスケープをハードコードしないでください。を使用しtputます。それが目的です!
Toby Speight 2015

@TobySpeightマルチプラットフォームサポート(理論的には)の場合はそれが当てはまるかもしれませんが、ポスターが自分の世界で機能することがわかった場合、同じような世界の他の人がこのテクニックを使用することに反対し、説得しないのはなぜですか?Ubuntu 16.04 bashでも同様に試していますが、うまくいきます。このプラットフォームの唯一のユーザーとして、私はこの答えを受け入れます。tputfor scとfor も使用しrcます(カーソルの保存、カーソルの復元)。この回答では「怠惰」と呼んでいますが、「実用的」または「要点」と言い換えることもできます。
WinEunuuchs2Unix

私の独自の解決策はこれに似ていて、純粋にシェルの組み込みに限定されていました。スクリプト内のすべてのメッセージに対して2つの外部プロセス、サブシェルなどをフォークすると、不快な匂いがしただけです。
アミットナイドゥ

6

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

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


5

生のANSI制御シーケンスに対しては必ずtputを使用する必要があります。

端末制御言語は多数あるため、通常、システムには中間通信層があります。実際に検出された端末タイプの実際のコードはデータベースで検索され、標準化されたリクエストをAPIまたは(シェルから)コマンドに与えます。

これらのコマンドの1つはtputです。tput機能名と呼ばれる頭字語のセットと、必要に応じてパラメーターを受け入れ、次に、terminfoデータベースで検出された端末の正しいエスケープシーケンスを検索し、正しいコードを出力します(端末はうまく理解します)。

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

とはいえ、bash-tintと呼ばれる小さなヘルパーライブラリを作成しました。これにより、tputの上に別のレイヤーが追加され、使用がさらに簡単になります(imho)。

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

次の結果が得られます。 ここに画像の説明を入力してください


5

現在の端末に固有のエスケープコードをハードコーディングする代わりに、を使用する必要がありますtput

これは私のお気に入りのデモスクリプトです。

#!/bin/bash

tput init

end=$(( $(tput colors)-1 ))
w=8
for c in $(seq 0 $end); do
    eval "$(printf "tput setaf %3s   " "$c")"; echo -n "$_"
    [[ $c -ge $(( w*2 )) ]] && offset=2 || offset=0
    [[ $(((c+offset) % (w-offset))) -eq $(((w-offset)-1)) ]] && echo
done

tput init

tputによる256色出力


4

これをカラー印刷に使用ています

#!/bin/bash
#--------------------------------------------------------------------+
#Color picker, usage: printf $BLD$CUR$RED$BBLU'Hello World!'$DEF     |
#-------------------------+--------------------------------+---------+
#       Text color        |       Background color         |         |
#-----------+-------------+--------------+-----------------+         |
# Base color|Lighter shade| Base color   | Lighter shade   |         |
#-----------+-------------+--------------+-----------------+         |
BLK='\e[30m'; blk='\e[90m'; BBLK='\e[40m'; bblk='\e[100m' #| Black   |
RED='\e[31m'; red='\e[91m'; BRED='\e[41m'; bred='\e[101m' #| Red     |
GRN='\e[32m'; grn='\e[92m'; BGRN='\e[42m'; bgrn='\e[102m' #| Green   |
YLW='\e[33m'; ylw='\e[93m'; BYLW='\e[43m'; bylw='\e[103m' #| Yellow  |
BLU='\e[34m'; blu='\e[94m'; BBLU='\e[44m'; bblu='\e[104m' #| Blue    |
MGN='\e[35m'; mgn='\e[95m'; BMGN='\e[45m'; bmgn='\e[105m' #| Magenta |
CYN='\e[36m'; cyn='\e[96m'; BCYN='\e[46m'; bcyn='\e[106m' #| Cyan    |
WHT='\e[37m'; wht='\e[97m'; BWHT='\e[47m'; bwht='\e[107m' #| White   |
#-------------------------{ Effects }----------------------+---------+
DEF='\e[0m'   #Default color and effects                             |
BLD='\e[1m'   #Bold\brighter                                         |
DIM='\e[2m'   #Dim\darker                                            |
CUR='\e[3m'   #Italic font                                           |
UND='\e[4m'   #Underline                                             |
INV='\e[7m'   #Inverted                                              |
COF='\e[?25l' #Cursor Off                                            |
CON='\e[?25h' #Cursor On                                             |
#------------------------{ Functions }-------------------------------+
# Text positioning, usage: XY 10 10 'Hello World!'                   |
XY () { printf "\e[$2;${1}H$3"; }                                   #|
# Print line, usage: line - 10 | line -= 20 | line 'Hello World!' 20 |
line () { printf -v _L %$2s; printf -- "${_L// /$1}"; }             #|
# Create sequence like {0..(X-1)}                                    |
que () { printf -v _N %$1s; _N=(${_N// / 1}); printf "${!_N[*]}"; } #|
#--------------------------------------------------------------------+

すべての基本色はvarとして設定され、いくつかの便利な関数があります:XY、線、およびque。このスクリプトをいずれかで入手し、すべてのカラー変数と関数を使用します。


3

そして、これは私がすべての組み合わせを見て、どれが読みやすいかを決めるために使用しました:

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

2

私はそれを達成するために盗品を書きました。

あなたはただすることができます

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で確認してください。


0

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

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


カラーループロジックは、このまともなAscii

-1

参照する:

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"
}

echo_green関数のコードは33ではなく32である必要があることに注意してください。b/ cを編集できないstackoverflowは、少なくとも6文字の編集が必要です。
Daniel

-2

これが最も簡単で読みやすい解決策です。bashj(https://sourceforge.net/projects/bashj/)では、次の行の1つを選択するだけです。

#!/usr/bin/bash

W="Hello world!"
echo $W

R=130
G=60
B=190

echo u.colored($R,$G,$B,$W)

echo u.colored(255,127,0,$W)
echo u.red($W)
echo u.bold($W)
echo u.italic($W)

Y=u.yellow($W)
echo $Y
echo u.bold($Y)

256x256x256 端末アプリケーションで色をサポートしている場合は、色を使用できます。


-3

スレッドから他のソリューションを混合した後、npm scripts出力で色を取得する方法を以下に示します(gitbash CLI)。

{
    "deploy": "echo \u001b[1;32m && ng build && echo \u001b[1;0mdeploy {\u001b[1;33mcopy\u001b[1;0m: \u001b[1;32m0% && cp -r -f dist/packaged/* \\\\SERVER-01\\dist\\ && echo \u001b[1;0mdeploy {\u001b[1;33mcopy\u001b[1;0m} \u001b[1;34m\u001b[1;1m100% DEPLOYED"
}

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


-4

少し何かがあるように、それをgrepに渡すと、赤(ただし赤のみ)として強調表示されます。名前付きパイプを使用して、文字列が行の終わりに近づくようにすることもできます。

 grep '.*' --color=always <(echo "foobar")

あなたが選んだ色を選択できるという点が欠けています。着色ユーティリティとしてのgrepも本当に疑わしいです:P
Ahmed Masud

実際はそうではありませんが、OPは特に赤が欲しいと述べました。私はgrepを使用するよりも優れたオプションがあることに同意しますが、それは彼らが要求したことを実現し、より複雑なことを学ぶ必要をなくします。
FinalDuty

-5
red='\e[0;31m'
NC='\e[0m' # No Color
echo -e "${red}Hello Stackoverflow${NC}"

これは正解です。ただし、色の呼び出しを引用符の中に含めないでください。

echo -e ${red}"Hello Stackoverflow"${NC}

トリックを行う必要があります。


3
見積もりの​​中でうまくいきます。-eスイッチは、引用符で囲まれたものも評価します。bash -xを使用して両方(引用符の内側と外側)を実行すると、同じ実行コマンドが出力されecho -e '\e[0;31mHello Stackoverflow\e[0m'ます。したがって、bashでも同じです。
naab 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.