私は、クリップボードがないtty(つまり、画面全体に広がるターミナルで、Ctrl+ Alt+で始まり、nは1から6までの整数を表します。私の知る限り、これらのターミナルは コマンドを使用して起動されます)で実行するPortageコマンドの出力を、他のコマンドとともにテキストファイルに書き込むことができるようにしたいと考えています。今、私はFngetty
Ubuntu フォーラムおそらく、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
thereは必要ありません
> cat
。実際、これはcat
現在のディレクトリに という別のファイルを作成するだけです。 と入力するつもりだった場合| cat
、これは不要であり、cat にパイプせずに出力をリダイレクトできます。emerge dev-qt/qtwayland > /home/fusion809/output.txt
保存します全てemerge
コマンドからの stdout 出力の/home/fusion809/output.txt
. すべて。ファイルに 4 行しかない場合は、emerge
stdout に 4 行しか出力されていないためです。emerging は にさらに多くのものを出力した可能性があります
stderr
。それもキャプチャしたい場合は を試してくださいemerge dev-qt/qtwayland >& /home/fusion809/output.txt
。これにより、stdout と stderr の両方が同じファイルにリダイレクトされます。との違いは
>
、>>
は>
ファイルが存在する場合は作成前にファイルを消去し、 は>>
ファイルがすでに存在する場合はファイルに追加し、存在しない場合は作成することです (シェル オプションによって異なります)。出力をファイルにキャプチャしたい場合そして同時に画面に表示するには、 を使用します
tee
。例:
emerge dev-qt/qtwayland |& tee -a /home/fusion809/output.txt
tee
の-a
オプションは、消去して上書きするのではなく、追加するように指示します。