如何将命令输出保存到Bash中的文件(也称为Linux和MacOS终端)

当您在bash提示符下运行命令时,它通常会将该命令的输出直接打印到终端,这样您就可以立即读取它。但是bash还允许您“重定向”任何命令的输出,将其保存到文本文件,以便稍后查看输出。

这可以在任何操作系统上运行,从Linux和MacOS到Windows10的基于Ubuntu的bash环境。

选项一:仅将输出重定向到文件

要使用bash重定向,可以运行命令,指定>或>>操作符,然后提供要将输出重定向到的文件的路径。

>将命令的输出重定向到文件,替换该文件的现有内容。 >>将命令的输出重定向到文件,将输出附加到文件的现有内容。

从技术上讲,这会将“stdout”(标准输出,即屏幕)重定向到一个文件。

这里有一个简单的例子。ls命令列出当前目录中的文件和文件夹。所以。当您运行以下命令时,ls将列出当前目录中的文件和文件夹。但是它不会将它们打印到屏幕上-它会将它们保存到您指定的文件中。

ls > /path/to/file

您不必指定现有文件的路径。指定任何有效路径,bash将在该位置创建一个文件。

如果您想查看该文件的内容,您将看到ls命令的输出。例如,cat命令将文件内容打印到终端:

cat /path/to/file

请记住,>1运算符用命令的输出替换文件的现有内容。如果希望将多个命令的输出保存到单个文件中,则可以使用>>操作符。例如,以下命令会将系统信息附加到您指定的文件:

uname -a >> /path/to/file

如果该文件不存在,bash将创建该文件。否则,bash将保留文件的现有内容,并将输出附加到文件的末尾。

当您查看该文件的内容时,您将看到第二个命令的结果被追加到该文件的末尾:

您可以根据需要重复此过程多次,以将输出附加到文件末尾。

选项二:正常打印输出并将其重定向到文件

您可能不喜欢使用>或>>操作符重定向输出,因为您不会在终端中看到命令的输出。这就是发球命令的作用。TEE命令将其接收到的输入打印到屏幕,并同时将其保存到文件。

要通过管道将命令的输出输出到TEE,并将其打印到屏幕并保存到文件,请使用以下语法:

command | tee /path/to/file

这将用命令的输出替换文件中的任何内容,就像>操作符一样。

要通过管道将命令的输出输出到TEE,并打印到屏幕并将其保存到文件,但将其附加到文件的末尾,请执行以下操作:

command | tee -a /path/to/file

这会将输出附加到文件的末尾,就像>>操作符一样。

相关:Shell脚本初学者指南:基础知识

bash shell包括一些执行类似功能的附加高级操作符。如果您正在编写bash脚本,它们将特别有用。有关更多详细信息,请参阅《高级Bash-脚本编写指南》中的I/O重定向一章。

相关文章