実行して出力をファイルに収集したいプログラムがあります。ただし、プログラムを実行すると、プログラムが開き/dev/stdout
(たとえば/proc/self/fd/0
)切り捨てられ、出力を蓄積するファイルからすべての内容が削除されます。
これは小さなシェルスクリプトで簡単に再現できます。
sh -c "echo 1; echo 2 > /dev/stdout ; echo 3" >> test.txt
このコマンドの結果には、test.txt
and 2
(3
この回答)。1
、2
およびを含めたいです3
。
追加情報:
- 実行された手順は、本人が管理することはできません。これは問題がないことを知っていますが、
>> /dev/stdout
変更することはできません。 cat
これを追加すると機能します... | cat >> test.txt
。しかし、私は追加のプロセスオーバーヘッドのないソリューションを好みます(これはベンチマーク目的です)。chattr +a test.txt
解決策かもしれませんが、ルートが必要です。私はただの一般ユーザーです。- 実際にはコンテナを使用してプログラムを実行し、出力リダイレクトはコンテナの外部で構成されます。したがって、コンテナの特定の構成を必要とするソリューションがある場合はこれが可能です。
- もちろん、文章を書いたり
/dev/stderr
直接使用するための/proc/self/fd/{0,1}
問題を単純化する一般的な解決策を探しています。
/proc/self/fd/0
とにかく、リダイレクト、ファイル記述子、またはファイルを指しても切り捨てを防ぐ方法を設定する方法があることを願っています。