echo "error" 1>&2 が覚えられないあなたのための3つの処方箋

シェルスクリプトを数か月に1回くらいしか書かない私のようなヘナチョコプログラマにとって、
echo "error message" 1>&2
この記法を習得するのはかなりの難問です。

毎回書き方を忘れてググるはめになるのですが、検索ワードがすぐ思いつかないという別の問題に直面します。
モジモジしてるうちにうっかりTwitterを見てしまい、時間を浪費してしまった経験はないでしょうか。

そこで、「これなら覚えられる、エラーメッセージ出力方法」を3通り考えてみました。

/dev/stderrに書き込む

たぶんこれが一番簡単です。
"stderr"の綴りは覚えたりせず、タブ補完に任せちゃいましょう。
$ echo "error" > /dev/stderr
動作確認方法
$ ( echo "error" > /dev/stderr ) > a.txt
error
画面に "error" が表示され、a.txtが空になっていれば成功です。

/dev/stderrは機種依存という話も聞きましたが、今どきのLinuxであればたぶん大丈夫でしょう。
(CentOS,Ubuntuでは動きました。)

Perlを使う

Perlを少しでも書いたことがあれば、warnはなじみが深いと思います。
$ perl -e 'warn "error\n"'
動作確認方法
$ ( perl -e 'warn "error\n"' ) > a.txt
error
ただ、こんな用途のためだけに突然Perlが登場すると、保守する人が動揺するかもしれません。

1>&2に自力でたどり着く方法を覚える

まず、あえてこう書きます。
$ echo "error" 1>2
すると、"2"という名前のテキストファイルが作られてしまいます。
$ cat 2
error
「あ、そりゃそうか」と納得します。

次に 文末に&を書きます。
$ echo "error" 1>2&
[1] 13699
$
[1]  + done       echo "error" > 2
バックグラウンドジョブで"2"という名前のテキストファイルが作られてしまいます。
$ cat 2
error
「あ、そりゃそうか」と納得します。

次に、&の位置を一個ずらします。
$ echo "error" 1>&2
error
「お、これでいけるんじゃね?」という気がしてきます。
動作確認します。
% ( echo "error" 1>&2 ) > a.txt
error
a.txtが空であれば、成功です!

これで、あいまいな記憶力に頼ることなく、Google検索せずに、正しくエラーメッセージを吐けますね!

Enjoy!
カテゴリ:

人気記事