Loading [MathJax]/jax/output/HTML-CSS/jax.js

2.11.2011

Catch the redirection error in UNIX shell

Solarisのkshで確認。

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

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

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

funcksh:file:

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

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

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

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

0 件のコメント:

コメントを投稿