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" # …略…
気なったのは、このシェルの次の箇所です。
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.
いくつかカラーを記載してみます。
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.
ESC
は、 8 進数だと \033
、 16 進数だと \x1B
、 10 進数だと 27
になるようです。
なので、 8 進数で指定していることがわかりました。
リセット
Hugo のシェルでは、すべての属性をリセットするために文字列の最後に ESC[0m
と記述しているようです。
echo コマンドのオプション
-e enable interpretation of backslash escapes
man echo
それから、 echo
の制御文字を有効にするために、オプションの -e
を指定しているようです。
終わり
bash は独特な記述があったりして知らないことが多かったりします。 記号とかだと検索しづらいところもありますし。