shell scriptを入れ子にした場合のteeの挙動について調べました
1. 概要
teeを利用して実行ログをファイルに保管することを良く実施します。このような処理をすでに組み込んでいるshell全体を更にteeを利用して実行ログをファイル保管するとどのようになるのか調べてみました。結果は、両方の機能が実行されることになり、片方の機能が無効になることはありませんでした。その内容を記述します。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で起動して別プロセスで試してみたので参考にしてください。
参考
[本ブログ内参照]
コメント
コメントを投稿