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で起動して別プロセスで試してみたので参考にしてください。

参考

[本ブログ内参照]

コメント

過去30日間に良く読まれた記事

miniPCのBMAXでWindows11のsecure boot設定漏れでトラブル発生

Windows95/98のPCゲームをUbuntu/LinuxMintの最新PCで楽しむ方法 ( KVM / Wine / dosbox-x / midi )

LinuxMint/ubuntuにWine 11導入を試しました ( LinuxMint 21.3 / 22.3 ubuntu 22.04 / 26.04 Wine 11.0 / 11.6 / 11.8 / 11.13 )