shell scriptを入れ子にした場合のteeの挙動について調べました
1. 概要
2. 詳細
単純なshellをtest1.shで作成します。#!/bin/bash
echo "test1" | tee test1.log
実行すると、test1.logが出力されて、中身は下記内容になります。
test1
同じ処理をtest2.sh, test3.sh作成します。更に、test.shを下記内容で作成します。
test.shを実行することで入れ子構造でのteeの動作を確認できます。
#!/bin/bash
test(){
sh test1.sh
sh test2.sh
sh test3.sh
}
test | tee test.log
それでは、test.shを実行します。
まず、test.logの内容は以下のようになります。
$ test.sh
test1
test2
test3
また、test1.log, test2.log, test3.logも作成されて、中身も想定した内容になります。
3.所見
入れ子(ネスティング)した場合の動作は、動かした場合と異なることがあります。shell内で、入れ子のshellの呼び出し方法にも影響します。今回はshで起動して別プロセスで試してみたので参考にしてください。
どのようなことでも実際に試験をして確かめることは大切なことだと思います。予測しない結果になることもあり、理論的に整理をしたことが間違いであったことに気がつくこともあります。しかし、実行した結果だけで判断することも問題があり、試験のミスもあるのが理由です。その意味で、過程を立てて、実際に試して、結果を見て判断するのが良いのでしょう。
4.追加
私はshell programmingを利用します。その理由は簡単で早く結果を出せる仕組みであり、スクリプトに定義することで繰り返し利用できるからです。Linuxの管理を行うとプログラミングよりもshell sxriptの利用頻度が高くなる傾向にあると思っています。
bash shell ( Ubuntu/LinuxMint は dash shell )は標準品であり、どこでも実行できます。Linux環境であるならばコマンドにご完成があり、よほど異なる環境でない限り、実行がエラになることはありません。
bash shellではLinuxの様々な組み込みコマンドを利用できます。このコマンドは信頼性が高く、バグはほとんどありません。結果が異なる場合は、たいていの場合、自分のミスです。信頼性の高いツール群を利用して、緊急性の高い処理を実現するのがshell protrammingと言えます。
実行速度の面は、普通の処理ならばプログラム言語と余り変わりません。もちろん、熟考されたロジックを持つプログラムには勝てませんが、課題発見から結果出力までの時間の速さはshell programmingが一番であると思いっています。
コメント
コメントを投稿