如何将 Portage 的输出写入 txt 文件?

如何将 Portage 的输出写入 txt 文件?

我希望能够编写在 tty 中执行的 Portage 命令以及其他命令的输出(即,以Ctrl+ Alt+开头的屏幕宽终端,其中 n 代表 1 到 6 之间的整数。这些终端是开始使用命令,据我所知)在没有剪贴板的情况下,到文本文件。现在我读到FngettyUbuntu 论坛如果使用得当,也许 Unix 命令cat可以做到这一点。不幸的是,按照建议的命令似乎没有将emerge命令的完整输出添加到文本文件中。看我跑了:

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

其中fusion809是我的用户名,它只向output.txt写入四行输出,即:

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告诉 shell 将标准错误输出发送到与标准输出相同的位置:

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

另外,如果您需要参考和了解更多信息,您可以随时在 shell 手册页中查找man sh

感谢您提供信息丰富且经过深思熟虑的问题!

答案2

  1. 你不需要> cat那里。事实上,这只是创建了另一个cat在当前目录中调用的文件。如果您想输入| cat,那是多余的,您可以重定向输出,而无需通过 cat 进行管道传输。

  2. emerge dev-qt/qtwayland > /home/fusion809/output.txt会保存全部命令的 stdout 输出emerge/home/fusion809/output.txt.所有的。如果文件中只有 4 行,那是因为emerge只将 4 行打印到 stdout。

  3. emerge 可能已经打印了更多的东西到stderr.如果你也想捕捉到这一点,请尝试emerge dev-qt/qtwayland >& /home/fusion809/output.txt。这会将 stdout 和 stderr 重定向到同一个文件。

  4. >和之间的区别>>在于,>如果文件存在,则在创建文件之前将其删除;>>如果文件已存在,则将其追加到文件中;如果不存在则创建文件(取决于 shell 选项)。

  5. 如果您想将输出捕获到文件中同时在屏幕上看到它,使用tee.例如:

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

tee-a选项告诉它追加而不是擦除和覆盖。

相关内容