tjinjin's blog

インフラ要素多めの個人メモ

シェルスクリプトとwindowsバッチの返り値のちょっとした違い

お疲れ様です。

 

最近とあることでほぼ同じ仕様のシェルスクリプトとwinバッチを作っておりますが、

シェルでできることがバッチでできなくて非常に困ってますw

 

関数の呼び出しとかは文法が違うだけなので、なんとかなっていますが、問題は

エラー処理です。

 

シェルの場合、実行したコマンドが何らかのエラーをはいた場合、$?でコマンドの終了

状態を知ることができます。通常終了の場合は「0」、異常終了の場合は「0以外」がセットされます。したがってコマンド終了後、$?を使ってエラーハンドリングができるわけです。

windowsバッチにも同様に%ERRORLEVEL%というものがあります。これもシェルと同じようにコマンドの終了状態が保持されているので、エラーハンドリングが可能です。

ところが、エラーがでても異常状態とキャッチされないコマンドがあるらしいのです(はめらめましたよ…

たとえば、echoコマンドです。echoを使ってある指定のファイルにデータを入れるとします。

echo data > /home/aaa/aaa.txt

というように。このとき、仮にaaaディレクトリがない場合、シェルではエラーが出力され終了状態が「1」になります。一方でバッチで同様なコマンドを実行するとエラー出力はされますが、%ERRORLEVEL%には「0」が出力されてしますのです(ぐぬぬ

 ということで、他の方法でエラーをキャッチしなければいけないようです。

 

 

※参考

シェルスクリプト

http://shellscript.sunone.me/variable.html 

Windowsバッチ

http://d.hatena.ne.jp/simply-k/20100812/1281653517