

プロセスが自分自身の標準エラーに出力した内容を、あとから参照する方法を探しています。

背景です。  
コマンドmycmdとmycheckとmysendmailがあります。  
コマンド"mycmd"は、コマンド"mycheck"を実行して、エラーになればmysendmailを実行します。  
"mysendmail"は標準入力の内容を本文にして、管理者にメールを送信します。  
"mycheck"の出力するエラーログは、"mycmd"の呼び出し元の標準エラーと、メール本文の両方に出力する必要があります。

現在はプロセス置換を使って以下のように書いています。

コマンド"mycmd" :

[code]

    mycheck 2> >(tee err.log >&2)
    if [ $? -ne 0 ]; then
      mysendmail < err.log
      exit -1
    fi
    
[/code]

これで動作は問題ないのですが、一時ファイル"err.log"が作成されるのが、  
いまいちスマートでないと思っています。  
一時ファイルを作成せずに仕様を満たすやり方はあるでしょうか。

できれば自分自身の標準エラーを参照する手段を使って（例えば仮想ファイル "STDERR_CACHE"
に標準エラーの内容が記録される、など）、以下のようにかくことが理想なのですが、そのような手段はあるでしょうか。

[code]

    mycheck || {
      mysendmail < $STDERR_CACHE
      exit -1
    }
    
[/code]


CC BY-SA 4.0
2020-11-22T03:25:50.910
72137
2020-11-22T04:38:02.517
2020-11-22T03:40:27.297
28998
28998
question
bash
bash:自分自身の標準エラーを参照する方法


シェル変数(`STDERR_CACHE`)に格納する方法はどうでしょうか。`mysendmail` への入力には bash の `here
string(<<<)` を使います。

[code]

    #!/bin/bash
            :
    
    STDERR_CACHE="$(mycheck 2>&1 >/dev/null)"
    exit_status=$?
    echo "${STDERR_CACHE}" >&2
    
    if [ ${exit_status} -ne 0 ]; then
      mysendmail <<< "${STDERR_CACHE}"
      exit -1
    fi
    
[/code]


CC BY-SA 4.0
2020-11-22T04:38:02.517
72140
2020-11-22T04:38:02.517
72137
answer