Hugo のデプロイのシェルの echo が気になったので調べました

Bash で気になって調べたことを書いておきます。

気になるところ

このブログは Hugo で作成していて、 GitHub Pages にデプロイしています。 デプロイについては、次の記載を参考にしています。

Put it Into a Script

You’re almost done. You can also add a deploy.sh script to automate the preceding steps for you. You can also make it executable with chmod +x deploy.sh. The following are the contents of the deploy.sh script:

#!/bin/bash

echo -e "\033[0;32mDeploying updates to GitHub...\033[0m"
# …略…

Host on GitHub | Hugo

気なったのは、このシェルの次の箇所です。

echo -e "\033[0;32mDeploying updates to GitHub...\033[0m"

結果としてはコンソールに緑の文字で表示されるので、そのための対処かなと思っています。

ANSI escape code

調べたところ、 ANSI escape code のようでした。

Colors

3/4 bit

The original specification only had 8 colors, and just gave them names. The SGR parameters 30-37 selected the foreground color, while 40-47 selected the background. Quite a few terminals implemented “bold” (SGR code 1) as a brighter color rather than a different font, thus providing 8 additional foreground colors. Usually you could not get these as background colors, though sometimes inverse video (SGR code 7) would allow that. Examples: to get black letters on white background use ESC[30;47m, to get red use ESC[31m, to get bright red use ESC[1;31m. To reset colors to their defaults, use ESC[39;49m (not supported on some terminals), or reset all attributes with ESC[0m. Later terminals added the ability to directly specify the “bright” colors with 90-97 and 100-107.

ANSI escape code - Wikipedia

いくつかカラーを記載してみます。

Name FG code BG code
Black 30 40
Red 31 41
Green 32 42
Yellow 33 43
Blue 34 44
Magenta 35 45
Cyan 36 46
White 37 47

このカラーの指定について、いくつかあるようです。

例1

前景色(文字)を黒、背景色を白にする場合は、 ESC[30;47m のように指定するようです。 なので、 ; で区切った左側の数字が前景色、右側の数字が背景色になるようです。

例2

前景色を赤にする場合は、 ESC[31m のように指定するようです。

例3

前景色を明るい赤にする場合は、 ESC[1;31m のように指定するようです。 これは、カラーの表を見ると ESC[91m と指定しても同じようです。 なので、 ; で区切った左側の数字が 0 だと明るくない色、 1 だと明るい色になるようです。

Hugo のシェルは、この例3の形式で、明るくない緑 (ESC[0;32m) と指定しているようです。

ASCII escape character

それから、 Hugo のシェルの内容と比較してみると ESC\033 に対応していることが想像できます。

ASCII escape character

The ASCII “escape” character (octal: \033, hexadecimal: \x1B, or ^[, or, in decimal, 27) is used in many output devices to start a series of characters called a control sequence or escape sequence.

Escape character - Wikipedia

ESC は、 8 進数だと \033 、 16 進数だと \x1B 、 10 進数だと 27 になるようです。 なので、 8 進数で指定していることがわかりました。

リセット

Hugo のシェルでは、すべての属性をリセットするために文字列の最後に ESC[0m と記述しているようです。

echo コマンドのオプション

-e enable interpretation of backslash escapes

man echo

それから、 echo の制御文字を有効にするために、オプションの -e を指定しているようです。

終わり

bash は独特な記述があったりして知らないことが多かったりします。 記号とかだと検索しづらいところもありますし。