我希望能够编写在 tty 中执行的 Portage 命令以及其他命令的输出(即,以Ctrl+ Alt+开头的屏幕宽终端,其中 n 代表 1 到 6 之间的整数。这些终端是开始使用命令,据我所知)在没有剪贴板的情况下,到文本文件。现在我读到Fngetty
Ubuntu 论坛如果使用得当,也许 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
你不需要
> cat
那里。事实上,这只是创建了另一个cat
在当前目录中调用的文件。如果您想输入| cat
,那是多余的,您可以重定向输出,而无需通过 cat 进行管道传输。emerge dev-qt/qtwayland > /home/fusion809/output.txt
会保存全部命令的 stdout 输出emerge
到/home/fusion809/output.txt
.所有的。如果文件中只有 4 行,那是因为emerge
只将 4 行打印到 stdout。emerge 可能已经打印了更多的东西到
stderr
.如果你也想捕捉到这一点,请尝试emerge dev-qt/qtwayland >& /home/fusion809/output.txt
。这会将 stdout 和 stderr 重定向到同一个文件。>
和之间的区别>>
在于,>
如果文件存在,则在创建文件之前将其删除;>>
如果文件已存在,则将其追加到文件中;如果不存在则创建文件(取决于 shell 选项)。如果您想将输出捕获到文件中和同时在屏幕上看到它,使用
tee
.例如:
emerge dev-qt/qtwayland |& tee -a /home/fusion809/output.txt
tee
的-a
选项告诉它追加而不是擦除和覆盖。