コマンドラインインタフェースを極めるシリーズ1

このシリーズの目的

長年LinuxとかAIXとかでコマンドライン操作やシェルを作ったりしていると、色々なテクニックが身についてきました。

せっかくなのでテクニックを公開していこうかと思い、書き始めます。

シリーズ1回目:エスケープ文字でかっこいい出力にできるんだ

コマンドラインの出力といえば、echoとかprintとかprintfとかを使っていると思います。

今回はechoを使って様々な出力方法について紹介していきます。

 

エスケープ文字は以下のようなものがあります。

 

\a ベルを鳴らす
\b バック・スペース
\e エスケープ文字
\f フォーム・フィールド文字
\n 改行
\r 復帰
\t 水平タブ
\v 垂直タブ
\c 改行しない
\数字 指定したASCIIコードの文字。数字は8進数3桁で表記する
\x数字 指定したASCIIコードの文字。数字は16進数3桁で表記する

以下は同じ結果出力になりますね。

 

「\n」の例

echo "こんにちは"

printf "こんにちは\n"

 

「\c」の例

echo "こんにちは\c"

printf "こんにちは"

 

ところで、本日の魔法の呪文は「 \033[ 」です。

 

この呪文をつかって、いろいろな出力方法を紹介します。

\033[ は \e[ と書けるOSもあります。この呪文(文字列)はエスケープと呼ばれる特殊文字です。

 

通常echoで文字出力する時は次のように書きます。

 

echo "こんにちは"

 

これを実行すると、「こんにちは」と表示されます。

では、次のように入力して実行してみましょう。

 

echo "\033[0;34mこんにちは\033[0m"

 

すると、「こんにちは」と表示されます。

なんと、色がつきましたね。

このように、文字を飾る時に\033[?mを使います。

?はデコレーション指定の数字、複数指定時はセミコロン(;)で区切る、最後にm(デコレーションですよフラグ)を付けます。

 

では、上記のechoコマンドを解説しましょう。

\033[0;34m  ・・・ここから青色文字でっていう意味です。

\033[0m ・・・ここから色をリセットっていう意味です。

echoで表示する文字に色を付ける場合は、\033[色指定の数字m という指示を出します。

最後に\033[0mを書かないと、以降全ての表示が指定した色になってしまうので、最後のリセットはお忘れないように。

つまり、\033[?m ~ \033[0m までがデコレーションされます。

色は次のように定義されています。

 

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

 

0;は省くことができます。

30番台は文字の色です。

これを40番台にすると、背景色になります。

Black       0;40     Dark Gray     1;40
Blue        0;44     Light Blue    1;44
Green       0;42     Light Green   1;42
Cyan        0;46     Light Cyan    1;46
Red         0;41     Light Red     1;41
Purple      0;45     Light Purple  1;45
Brown       0;43     Yellow        1;43
Light Gray  0;47     White         1;47

echo "\033[1;34;44mこんにちは\033[0m" ・・・AIXの場合 Linuxの場合はecho -e "\033[1;34;44mこんにちは\033[0m"

のような形式で背景と文字色を同時に指定できます。

 

 

文字に下線を書くには 4を指定。たとえば、 \033[4m

色の反転は 7を指定します。たとえば、 \033[7m

 

 

\033[を使ってカーソル位置指定もできます。

表示位置を指定できることから、対話式のコマンドを作成するときに役立ちます。

 

 

- カーソルの位置をY行X列に決める。
  \033[<Y>;<X>H
- カーソルを Y 行上に動かす。
  \033[<Y>A
- カーソルを Y 行下に動かす。
  \033[<Y>B
- カーソルを X 列右に動かす。
  \033[<X>C
- カーソルを X 列左に動かす。
  \033[<X>D

- カーソルの位置を記憶する。
  \033[s
- 記憶していたカーソルの位置に戻す。
  \033[u

 

\033[を使って画面表示を消すこともできます。

 

\033[2J   画面クリア(clearコマンドと同じ)
\033[K    カーソル位置〜行末迄をクリア