apt
Bashシェルで単独で実行され、出力がファイルにリダイレクトされたときに出力が異なることを確認しました。
たとえば、
$ apt install ./*.deb --simulate 1>111.txt 2>222.txt
ストリーム2のファイルにリダイレクト結果テキストを追加し、WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
リダイレクトなしでaptを実行すると、このテキストはシェルウィンドウに表示されません。
出力がリダイレクトに依存するのはなぜですか?apt
パラメータとしてリダイレクトを検討してください。シェルのコマンドラインの他の部分が目立たないようにリダイレクトを作成するにはどうすればよいですか?
PS Ubuntu 18で見たところ、特定のアプリケーションに関する問題でしたが、問題はUnixで一般的かもしれないので、ただタグにapt
入れました。shell
ベストアンサー1
apt
歴史的に対話型コマンドラインの使用を念頭に置いて設計されたエンコード警告は、シェルではapt
なくシェル内で意図的に実行されます。
ただし、apt
コマンドラインを解析する必要はありません。シェルが呼び出されると、すでにこれを行いますapt
。これは、ストリームが変更/リダイレクトされたかどうかを検出するapt
ことです。stdout
スクリプトで使用している場合は、ほぼ同じことを行い、リダイレクトについて警告しないapt
同様の古いコマンドがあります。apt-get
stdout
TLDRエラーメッセージを書くのはシェルではなくコマンドstderr
です。apt
シェルから出力をキャプチャできるという事実は、apt
stderr
マルチタスクオペレーティングシステムであるUnixの製品であり、その出力を生成することがシェルではありません。
PS。コマンドに対して strace を実行すると、apt
メッセージが記録されていることがわかります。
strace apt get install bash > a
....
write(2, "\n", 1
) = 1
write(2, "WARNING: ", 9WARNING: ) = 9
write(2, "apt", 3apt) = 3
write(2, " ", 1 ) = 1
write(2, "does not have a stable CLI inter"..., 38does not have a stable CLI interface. ) = 38
write(2, "Use with caution in scripts.", 28Use with caution in scripts.) = 28
write(2, "\n", 1
) = 1
write(2, "\n", 1
) = 1