Ubuntu is a community developed operating system that is perfect for laptops, desktops and servers.

LinuxやFreeBSDの操作に慣れてきたら、次はコマンドを組み合わせてシェルスクリプトを作成し、これまでコマンドラインから入力していた処理の自動化や、より高度なコマンドの作成を実施していきたい。こういった場合、ターミナルそのものがユーザが操作する基本インタフェースということになる。

ターミナルは文字を表示するという機能以外にも、所定の場所にカーソルを表示させたり、フォントを変更したり、表示する色を変更したりとさまざまな機能を提供している。これら機能は制御コードシーケンスと呼ばれる特殊な文字列をターミナルに出力することで利用できる。ただし、制御コードシーケンスはターミナルごとに違っているため、通常は制御コードシーケンスを直接は使わない。かわりにターミナルデータベースからサポートされている制御コードシーケンスを持ってきてそれを利用する。これを簡単に実施するためのコマンドにtput(1)がある。

The Geek Stuffの9 UNIX / Linux tput Examples: Control Your Terminal Color and Cursorの記事にtput(1)を使った簡単なサンプルが掲載されている。tput(1)は主に2種類の系統がある。記事で取り上げられているのはそのうち1種類だ。tput(1)スタイルのそれぞれ代表的なOSとしてUbuntuとFreeBSDを例にあげ、The Geek Stuffの記事に掲載されているサンプルを整理すると次のようになる。

操作 Ubuntu FreeBSD
ターミナルクリア tput clear tput cl
指定場所にカーソルを移動 tput cup 5 10 tput cm 5 10
ターミナルのカラム数を表示 tput cols tput co
ターミナルの行数を表示 tput lines tput li
背景色を設定 tput setb 5 tput AB 5
前景色を設定 tput setf 5 tput AF 5
フォントを太字に設定 tput bold tput md
設定をリセット tput sgr0 tput rs
下線表示 tput rmul tput us
カーソルを表示 tput civis tput vs
カーソルを非表示 tput cnorm tput vi

高度な使い方をするようになった場合、9 UNIX / Linux tput Examples: Control Your Terminal Color and Cursorに掲載されているサンプルだけでは機能が足りない。かといってtput(1)のマニュアルにはtput(1)で指定できるすべての機能は説明されていない。これはそもそもターミナルが実装している機能で、tput(1)が実装している機能ではないためだ。その場合、次の情報を参考にすればいい。

  • Ubuntu - Ubuntuのtput(1)はterminfo(5)のCapnameに記載されているコードを引数にとって動作する。このため、terminfo(5)のマニュアルの「Capname」関連の説明を参考にしながら、tput(1)コマンドの引数にCapnameを指定すればいい。
  • FreeBSD - FreeBSDのtput(1)はtermcap(5)のTCapCodeに記載されているコードを引数にとって動作する。このため、termcap(5)のマニュアルの「TCapCode」関連の説明を参考にしながら、tput(1)コマンドの引数にTCapCodeを指定すればいい。

tput(1)を使うと利用するターミナルに関係なくサポートされている機能を利用できるようになる。出力を強調付けるといった基本的な使い方から、カーソルを表示を駆使してグラフィカルな出力を実現するといったことも可能になる。