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

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

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

有没有不使用任何软件的方法?我想知道怎么做。

答案1

是的,这是可能的,只需重定向输出(又名stdout) 到文件:

SomeCommand > SomeFile.txt  

或者如果您想附加数据:

SomeCommand >> SomeFile.txt

如果你想stderr也可以使用这个:

SomeCommand &> SomeFile.txt  

或者附加以下内容:

SomeCommand &>> SomeFile.txt  

如果你想两者兼得stderr和输出显示在控制台上在一个文件中用这个:

SomeCommand 2>&1 | tee SomeFile.txt

(如果只想要输出,请删除2上面的内容)

答案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 管道化到第二个命令的简写语法,这里需要将其与teeagain 结合使用以完成表格。如果您确实需要这样的东西,请查看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

相关内容