当前位置: 首页>>技术教程>>正文


如何将终端输出保存到文件中?

,

问题描述

如何将命令的输出保存到文件?

没有使用任何软件的方法吗?我想知道如何。

最佳解决方法

是的,这是可能的,只是将输出重定向到一个文件:

someCommand > someFile.txt  

或者如果你想追加数据:

someCommand >> someFile.txt

如果你想stderr也使用这个:

someCommand &> someFile.txt  

或者这附加:

someCommand &>> someFile.txt  

次佳解决方法

要将命令的输出写入文件,基本上有10种常用的方法。

概述:

Please note that the n.e. in the syntax column means “not existing”.
There is a way, but it’s too complicated to fit into the column. You can find a helpful link in the List section about it.

          || 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结合才能完成表格。如果您真的需要这样的东西,请查看“How to pipe stderr, and not stdout?” on Stack Overflow以了解如何完成此操作的一些方法。通过交换流或使用流程替代。

  • command |& tee output.txt标准输出和标准错误流都将被复制到文件中,同时在终端中仍然可见。如果文件已经存在,它会被覆盖。

  • command |& tee -a output.txt标准输出和标准错误流都将被复制到文件中,同时在终端中仍然可见。如果文件已经存在,新的数据将被附加到文件的末尾。

第三种解决方法

您还可以使用tee将输出发送到文件:

command | tee ~/outputfile.txt

稍作修改也会引发stderr:

command 2>&1 | tee ~/outputfile.txt

或略短而复杂:

command |& tee ~/outputfile.txt

tee非常有用,如果您希望能够捕捉命令输出,同时还可以实时查看它。

第四种方法

您可以将命令输出重定向到一个文件:

your_command >/path/to/file

要将命令输出附加到文件而不是覆盖它,请使用:

your_command >>/path/to/file

第五种方法

需要考虑的一项改进 –

各种脚本会在输出中注入颜色代码,您可能不希望混淆日志文件。

要解决这个问题,您可以使用sed程序去除这些代码。例:

command 2>&1 | sed -r 's/'$(echo -e "\033")'\[[0-9]{1,2}(;([0-9]{1,2})?)?[mK]//g' | tee ~/outputfile.txt

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/95.html,未经允许,请勿转载。