如何将命令的输出保存到文件?
有没有不使用任何软件的方法?我想知道怎么做。
答案1
答案2
要将命令的输出写入文件,基本上有 10 种常用的方法。
概述:
请注意,
n.e.
语法列中的 表示“不存在”。
有一种方法,但是太复杂了,不适合放在专栏里。你可以在列表部分找到一个有用的链接。
|| visible in terminal || visible in file || existing
Syntax || StdOut | StdErr || StdOut | StdErr || file
==========++==========+==========++==========+==========++===========
> || no | yes || yes | no || overwrite
>> || no | yes || yes | no || append
|| | || | ||
2> || yes | no || no | yes || overwrite
2>> || yes | no || no | yes || append
|| | || | ||
&> || no | no || yes | yes || overwrite
&>> || no | no || yes | yes || append
|| | || | ||
| tee || yes | yes || yes | no || overwrite
| tee -a || yes | yes || yes | no || append
|| | || | ||
n.e. (*) || yes | yes || no | yes || overwrite
n.e. (*) || yes | yes || no | yes || append
|| | || | ||
|& tee || yes | yes || yes | yes || overwrite
|& tee -a || yes | yes || yes | yes || append
列表:
command > output.txt
标准输出流将仅重定向到文件,它在终端中不可见。如果文件已存在,它将被覆盖。
command >> output.txt
标准输出流将仅重定向到文件,在终端中不可见。如果文件已存在,新数据将附加到文件末尾。
command 2> output.txt
标准错误流将仅重定向到文件,它在终端中不可见。如果文件已存在,它将被覆盖。
command 2>> output.txt
标准错误流将仅重定向到文件,在终端中不可见。如果文件已存在,新数据将附加到文件末尾。
command &> output.txt
标准输出和标准错误流都将重定向到文件,终端中不会显示任何内容。如果文件已存在,则会被覆盖。
command &>> output.txt
标准输出和标准错误流都将重定向到文件,终端中不会显示任何内容。如果文件已存在,新数据将附加到文件末尾。
command | tee output.txt
标准输出流将被复制到文件,它仍将在终端中可见。如果文件已存在,它将被覆盖。
command | tee -a output.txt
标准输出流将被复制到文件,它仍将在终端中可见。如果文件已存在,新数据将附加到文件末尾。
(*)
Bash 没有允许仅将 StdErr 管道化到第二个命令的简写语法,这里需要将其与
tee
again 结合使用以完成表格。如果您确实需要这样的东西,请查看Stack Overflow 上的“如何管道化 stderr,而不是 stdout?”了解一些可以实现这一点的方法,例如通过交换流或使用进程替换。command |& tee output.txt
标准输出和标准错误流都将复制到文件,同时在终端中仍然可见。如果文件已存在,则会被覆盖。
command |& tee -a output.txt
标准输出和标准错误流都将复制到文件,同时在终端中仍然可见。如果文件已存在,新数据将附加到文件末尾。
答案3
您还可以使用tee
将输出发送到文件:
command | tee ~/outputfile.txt
稍加修改也能捕获 stderr:
command 2>&1 | tee ~/outputfile.txt
或者稍微简短一些,不那么复杂:
command |& tee ~/outputfile.txt
tee
如果你想捕获命令输出同时实时查看。
答案4
您可以将命令输出重定向到文件:
your_command >/path/to/file
要将命令输出附加到文件而不是覆盖它,请使用:
your_command >>/path/to/file