私の問題は、私がこれらのタスクを実行するUbuntu 20.04にあります。
現在、$BASH_COMMAND、$LINENO、$?などの一部のステータス情報をデバッグトラップに渡します。また、コマンドによって生成された標準エラーメッセージをトラップ関数に渡したいと思います。 $?現在の命令がまだ実行されていないため、現在の命令ではなく前の命令の戻りコードになるため、無効である可能性があります。 $?そして、コマンドを実行した後、stderrメッセージをERRトラップ機能に渡す必要があります。次のリンクは、この質問の思考プロセスを開始します。実行されるすべてのコマンドに対して2>を一般的な方法で変数にリダイレクトできますか?
実行されたコマンドからエラーメッセージをキャプチャする方法は?
その場合は、最後のstderrメッセージを含む変数をERRトラップ関数に渡すこともできます。残念ながら、最後のコマンドに対してコマンド、行番号、戻りコード、および標準エラーメッセージのすべてを1つの場所で使用してトラップ関数を呼び出すことができるように変数をリダイレクトする方法がわかりません。
おそらく、トラップ機能の起動後に読み取ることができる一意の名前の追加されていないファイルにstderrをリダイレクトするために、サブシェル、ソース、関数名、行番号(およびコマンドも可能)を使用する方法があります。この場合、ディスク(SSDまたはRUST)に書き込むよりも、これらのファイルをメモリに書き込んで自動的に消去することをお勧めします。これらのファイルを作成して削除すると、かなりのオーバーヘッドが発生します。
上記のすべての欠点を考えると、bash特殊変数の追加を制御する人が$ %に関連する新しい変数を考慮すると思いますか?たぶん、ERRトラップに渡すためにstderrメッセージを保存する方が良いでしょうか?すでにそのような変数があるかもしれませんが、まだ名前が見つかりませんでした。
ありがとう
デバッグトラップのスケルトン
fxTrapDEBUG()
{
set -x
local lBashCommand="$1"
local lLineNo="$2"
set +x
}
trap 'fxTrapDEBUG "$BASH_COMMAND" "$LINENO"' DEBUG
ERR(エラー)トラップのスケルトン
fxTrapERROR()
{
set -x
local lBashCommand="$1"
local lLineNo="$2"
local lReturnCode="$3"
local lStdErrMsg="$4"
set +x
}
trap 'fxTrapERROR "$BASH_COMMAND" "$LINENO" "$?" "???"' ERR
私の質問は「???」以上を置き換えるには何を使うべきかです。