$HOME/.colorecho もしくは環境変数 $COLORECHO で指定したディレクトリ(オプションファイルディレクトリと呼びます)にオプション値を記述したファイルを作ることでいちいちたくさんの長いオプションを指定しなくて済むようになります。
-cオプションでどのオプション値が記述されたファイルを使用するか指定することが可能です。

環境変数$COLORECHOが見つかったときはcolorecho$HOME/.colorechoを探しません。

1. デフォルトのオプション値に関して

オプションファイルディレクトリを発見できたときだけ colorecho は配下から default という名前のファイルを探します。これは-c defaultが指定されていなくても行われます。

もし発見できれば default に書かれた設定値をオプションとして読み込みます。見つからなければデフォルトのオプションがないと判断し無視します。

文字色のデフォルト値を megenta にする:
$ vim ~/.colorecho/default
f=magenta

2. 任意のオプション値について

デフォルト以外のオプションを作りたいとき(例えばあるログファイルを tail するときに指定したいオプションをあらかじめ決めておきたいときなど)は以下のようにします。

  • 1 オプションファイルディレクトリに任意の名前のファイルを生成します。例えば $HOME/.colorecho/foo というオプションファイルを作るとしましょう。
  • 2 オプションファイルに指定したいオプション名とオプション値を書き込みます。詳しい書式は「colorecho のオプションファイルの書式」をご覧ください。
  • 3 完成したオプションファイル foo をオプションとして読み込みたいときには -c foo をつけて実行します。つまり -c で指定する値はオプションファイルディレクトリ配下のファイル名のことです。

3. オプションファイルの複数読み込み

-c foo,bar のようにカンマで区切ればオプションファイルを複数読み込むことができます。default を指定したい場合も -c foo,bar,default と必要する必要はいっさいありません。オプションファイルディレクトリに default という名前のファイルがあれば -c オプションの指定の有無に関わらず自動で読み込みます。

-c オプションを指定しているときはオプションファイルディレクトリは必ず存在していなくてはなりません。-c オプションを指定しているがオプションファイルディレクトリがないとき、オプションファイルディレクトリはあるが -c オプションで指定した値のファイル名が見つからないとき colorecho はそれぞれエラーメッセージを出し異常終了で終わります。

4. 複数指定できないオプションの優先順位について

例えば -c foo,bar と指定した場合、まず default が存在する場合は最初に評価されます。次に foo が評価され bar が評価されます。つまり default -> foo -> bar の順で評価されます。そして最後に評価されるのがコマンドラインから指定したオプションです。

複数指定可能でないオプションが重複していた場合、後に評価されるオプションのほうが優先されます。例えば foo ファイルで -f red と指定していた場合でも colorecho -f green と指定すれば文字色は後で評価される green のほうが優先されます。複数指定ができないオプションは常に後から評価されるほうが適用されますのでコマンドラインで与えたオプションが最も優先されるのです。

5. colorecho のオプションファイルの書式

  • オプション名=値 という書式で指定します。
  • 次のオプションを指定する場合は必ず改行します。
  • オプションファイル内の行頭の # から行末まではコメントとして扱われます。
  • オプション値をダブルクォートで囲んではいけません。ダブルクォートはそのまま文字列として評価されます。
  • ダブルクォートやバックスラッシュをバックスラッシュでエスケープする必要はありません。エスケープしなくてもそのまま評価されます。
  • 以下のオプションを使用することはできません。-l,-s,-c,-h,-v
例:
-f=gray
-b=black
--pickup=/^foo/,h_cyan,nil,bold,underline
-H=blue

また、オプション名の prefixの -, --は省略することが可能です。以下のように書くことができます。

f=gray
b=black
pickup=/^foo/,h_cyan,nil,bold,underline
H=blue