2.11.2011

Catch the redirection error in UNIX shell

Solarisのkshで確認。

とあるファイルを初期化するのに、たとえばこんな関数を作ったとする。

   1: func() {
   2:   : > file
   3:   echo $?
   4: }

ここで、fileへの書き込みに失敗した場合、非ゼロの値がエコーされることを期待する。
しかし実際には何も表示されない。

$ func
ksh: file: 作成できません。
$

どうやら、組み込みコマンドのリダイレクションに失敗すると、その時点で関数から抜け出てしまうようである。

   1: func2() {
   2:   /bin/true > file
   3:   echo $?
   4: }
   5: func3() {
   6:   (:) > file
   7:   echo $?
   8: }

外部コマンドを使うか、サブシェルにすることで期待した結果を得ることができる。

$ func2
ksh: file: 作成できません。
1
$ func3
ksh: file: 作成できません。
1
$

0 件のコメント:

コメントを投稿