Portage の出力を txt ファイルに書き込むにはどうすればいいですか?

Portage の出力を txt ファイルに書き込むにはどうすればいいですか?

私は、クリップボードがないtty(つまり、画面全体に広がるターミナルで、Ctrl+ Alt+で始まり、nは1から6までの整数を表します。私の知る限り、これらのターミナルは コマンドを使用して起動されます)で実行するPortageコマンドの出力を、他のコマンドとともにテキストファイルに書き込むことができるようにしたいと考えています。今、私はFngettyUbuntu フォーラムおそらく、Unix コマンドはcat適切に使用すれば、これを実行できるでしょう。残念ながら、そこで提案されているコマンドを実行しても、emergeコマンドの完全な出力がテキスト ファイルに追加されないようです。私が実行したコマンドを参照してください。

emerge dev-qt/qtwayland > cat >> /home/fusion809/output.txt

ここで、fusion809 は私のユーザー名で、output.txt には次の 4 行のみが出力されました。

Calculating dependencies  ....... .. ....... done!
[ebuild   R    ] media-libs/mesa-11.0.4  USE="-wayland*" ABI_X86="32*"
[ebuild   R    ] dev-qt/qtgui-5.5.1  USE="-egl* -evdev* -ibus*"
[ebuild   R    ] dev-qt/qtwayland-5.5.1  USE="-egl*"

私も試しました:

emerge dev-qt/qtwayland > /home/fusion809/output.txt

そして:

emerge dev-qt/qtwayland >> /home/fusion809/output.txt

どちらも output.txt に同じ出力を書き込みました。

答え1

正解です。Unix/Linux にもエラー ストリームがあります。すべてのコマンドは標準入力、標準出力、および標準エラーを受け取ります。

これまでは標準出力を操作してきました。コマンドから標準エラー ストリームもキャプチャするには、 を使用します2>。例:

emerge dev-qt/qtwayland > emerge.out 2> emerge.err

標準出力が必要な場合はそしてエラーが発生する同じファイルを使用して、2>&1シェルに標準エラー出力を標準出力と同じ場所に送信するように指示します。

emerge dev-qt/qtwayland > emerge.out 2>&1

また、さらに詳しく参照したり学習したりする必要がある場合は、いつでもシェルのマニュアル ページで調べることができますman sh

有益でよく考えられた質問をありがとうございます!

答え2

  1. thereは必要ありません> cat。実際、これはcat現在のディレクトリに という別のファイルを作成するだけです。 と入力するつもりだった場合| cat、これは不要であり、cat にパイプせずに出力をリダイレクトできます。

  2. emerge dev-qt/qtwayland > /home/fusion809/output.txt保存します全てemergeコマンドからの stdout 出力の/home/fusion809/output.txt. すべて。ファイルに 4 行しかない場合は、emergestdout に 4 行しか出力されていないためです。

  3. emerging は にさらに多くのものを出力した可能性がありますstderr。それもキャプチャしたい場合は を試してくださいemerge dev-qt/qtwayland >& /home/fusion809/output.txt。これにより、stdout と stderr の両方が同じファイルにリダイレクトされます。

  4. との違いは>>>>ファイルが存在する場合は作成前にファイルを消去し、 は>>ファイルがすでに存在する場合はファイルに追加し、存在しない場合は作成することです (シェル オプションによって異なります)。

  5. 出力をファイルにキャプチャしたい場合そして同時に画面に表示するには、 を使用しますtee。例:

emerge dev-qt/qtwayland |& tee -a /home/fusion809/output.txt

tee-aオプションは、消去して上書きするのではなく、追加するように指示します。

関連情報