ファイルの切り捨てを防ぐために、/dev/stdoutを介した出力リダイレクト

ファイルの切り捨てを防ぐために、/dev/stdoutを介した出力リダイレクト

実行して出力をファイルに収集したいプログラムがあります。ただし、プログラムを実行すると、プログラムが開き/dev/stdout(たとえば/proc/self/fd/0)切り捨てられ、出力を蓄積するファイルからすべての内容が削除されます。

これは小さなシェルスクリプトで簡単に再現できます。

sh -c "echo 1; echo 2 > /dev/stdout ; echo 3" >> test.txt

このコマンドの結果には、test.txtand 23この回答)。12およびを含めたいです3

追加情報:

  • 実行された手順は、本人が管理することはできません。これは問題がないことを知っていますが、>> /dev/stdout変更することはできません。
  • catこれを追加すると機能します... | cat >> test.txt。しかし、私は追加のプロセスオーバーヘッドのないソリューションを好みます(これはベンチマーク目的です)。
  • chattr +a test.txt解決策かもしれませんが、ルートが必要です。私はただの一般ユーザーです。
  • 実際にはコンテナを使用してプログラムを実行し、出力リダイレクトはコンテナの外部で構成されます。したがって、コンテナの特定の構成を必要とするソリューションがある場合はこれが可能です。
  • もちろん、文章を書いたり/dev/stderr直接使用するための/proc/self/fd/{0,1}問題を単純化する一般的な解決策を探しています。

/proc/self/fd/0とにかく、リダイレクト、ファイル記述子、またはファイルを指しても切り捨てを防ぐ方法を設定する方法があることを願っています。

関連情報