如何将Linux命令的输出导入文件?

22

我正在命令行界面上运行一个任务,需要对我进行是/否选择。

在做出选择后,大量信息会在屏幕上滚动显示,包括一些错误信息。我想将这些输出导入到文件中,以便查看错误信息。由于该命令需要键盘输入,简单的'>'符号无法实现。

我使用的操作系统是Ubuntu 9.1。


你正在运行哪个命令?是make吗? - Cristina
5个回答

49
command &> output.txt
你可以使用&>将标准输出和错误输出重定向到一个文件中。这个符号是 command > output.txt 2>&1 的简写,其中的 2>&1 表示“将 stderr 发送到与 stdout 相同的位置”(stdout 是文件描述符 1,stderr 是 2)。
对于交互式命令,如果可以使用less并立即查看结果,我通常不会费心去将其保存到文件中:
command 2>&1 | less

1
将stdout和stderr都重定向到文件意味着他看不到实际提示符。我无法看出他会比他在问题中描述的情况更好。 - Epcylon
你在数字(12)的两侧都使用了 &。使用 &22&,甚至 2&>12>&1 有什么区别吗? - Fredrick Gauss
@FredrickGauss 哎呀!我的回答中有个打字错误。2&>1 是无效的。我本意是写 2>&1 - John Kugelman
当出现这样的问题时:&符号后面跟着一个数字(例如2>&1)代表什么意思?如果没有数字呢(你说没有数字代表标准输出和标准错误输出都会被重定向到同一位置,对吗)? - Fredrick Gauss
1
(1)如果你写 >2,那么bash会将输出写入一个名为2的文件。而写>&2则告诉bash,2是一个文件描述符号,而不是一个文件名。(2)在>之前写数字不需要加上&,因为文件名在左边是无效的。(3)&>是一种特殊的语法,用于重定向标准输出和标准错误输出。它也可以写成>&,但是&>更受欢迎。这两个都是特殊的语法。不要试图单独理解>&的含义。把&>看作一个单一的运算符。 - John Kugelman
将(1)和(2)放在一起,你就得到了 2>&1 - John Kugelman

4
echo yes | command > output.txt

根据命令读取输入的方式(一些程序在显示提示符之前会丢弃stdin中的所有内容,但大多数程序不会),这应该适用于任何理智的CLI环境。


1
我认为你的意思是 echo yes | command 而不是 command < \echo yes`。(还有一个可能有用的 yes` 命令。) - Jukka Matilainen
你说得对。我一开始想让他把输入放在文件中,后来改变主意,决定直接使用echo,但忘记更改命令行以匹配新的方法了。现在已经修复了。 - Epcylon
这会重新格式化我想要写入文件的JSON,不幸的是。 - metanerd
@metanerd:管道和重定向不会对通过它们传递的字节进行任何更改,因此如果您的JSON被重新格式化,那是因为其中一个涉及的命令执行了这个操作。一些命令在检测到它们的输出被管道/重定向时会改变它们的行为,这可能解释了您所看到的情况。 - Epcylon

1

使用2>而不是仅使用>


1
如果程序是由一个理智的人编写的,你可能想要的是 stderr 而不是 stdout。你可以通过使用类似于以下的东西来实现这一点:
foo 2> errors.txt

1

您可以使用2>选项将错误发送到文件中。

示例:

命令 2> error.txt

(使用2>选项) --- 如果在执行命令时出现任何错误,它将被发送到error.txt文件中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接