当在bash shell中运行命令时,通常会将命令的输出打印到终端,以便可以立即看到输出内容。但是bash还提供了一个选项,可以将任何bash命令的输出“重定向”到日志文件。它可以将输出保存到文本文件中,以便以后在需要时可以对此文本文件进行查看。
方法1:仅将输出写入文件
要将Bash命令的输出写入文件,可以使用右尖括号符号(>
)或双右尖符号(>>
):
右尖括号(>)
右尖括号号(>
)用于将bash命令的输出写入磁盘文件。如果没有指定名称的文件,则它将创建一个具有相同名称的新文件。如果该文件名称已经存在,则会覆盖原文件内容。
双右尖括号(>>)
它用于将bash命令的输出写入文件,并将输出附加到文件中。如果文件不存在,它将使用指定的名称创建一个新文件。
从技术上讲,这两个运算符都将stdout
(标准输出)重定向到文件。
当第一次写入文件并且不希望以前的数据内容保留在文件中时,则应该使用右尖括号(>
)。也就是说,如果文件中已经存在内容,它会清空原有数据内容,然后写入新数据。使用双右尖括号(>>
)则是直接将数据附加到文件中,写入后的内容是原文件中的内容加上新写入的内容。
示例ls
命令用于打印当前目录中存在的所有文件和文件夹。但是,当运行带有直角括号符号(>
)的ls
命令时,它将不会在屏幕上打印文件和文件夹列表。而是将输出保存到用指定的文件中,即如下脚本代码所示:
#!/bin/bash
#Script to write the output into a file
#Create output file, override if already present
output=output_file.txt
#Write data to a file
ls > $output
#Checking the content of the file
gedit output_file.txt
执行上面示例代码,得到以下结果:
如此处所示,ls
命令的输出重定向到文件中。要将文件的内容打印到终端,可以使用以下cat
命令格式:
#!/bin/bash
#Script to write the output into a file
#Create output file, override if already present
output=output_file.txt
#Write data to a file
ls > $output
#Printing the content of the file
cat $output
执行上面示例代码,得到以下结果:
如果要在不删除原文件数据内容的情况下,将多个命令的输出重定向到单个文件,则可以使用>>
运算符。假设要将系统信息附加到指定的文件,可以通过以下方式实现:
#!/bin/bash
#Script to write the output into a file
#Create output file, override if already present
output=output_file.txt
#Write data to a file
ls > $output
#Appending the system information
uname -a >> $output
#Checking the content of the file
gedit output_file.txt
在这里,第二条命令的结果将附加到文件末尾。可以重复几次此过程,以将输出追加到文件末尾。
执行上面示例代码,得到以下结果:
方法2:打印输出并写入文件
有些人可能不喜欢使用>
或>>
运算符将输出写入文件,因为终端中将没有命令的输出。可以通过使用tee
命令将接收到的输入打印到屏幕上,同时将输出保存到文件中。
Bash脚本
#!/bin/bash
#Script to write the output into a file
#Create output file, override if already present
output=output_file.txt
#Write data to a file
ls | tee $output
执行上面示例代码,得到以下结果:
与>
运算符一样,它将覆盖文件的原内容,但也会在屏幕上打印输出。如果要在不使用tee
命令删除文件内容的情况下将输出写入文件,则可以使用以下格式将输出打印到终端,参考以下代码:
#!/bin/bash
#Script to write the output into a file
#Create output file, override if already present
output=output_file.txt
echo "<<<List of Files and Folders>>>" | tee -a $output
#Write data to a file
ls | tee $output
echo | tee -a $output
#Append System Information to the file
echo "<<<OS Name>>>" | tee -a $output
uname | tee -a $output
执行上面示例代码,得到以下结果:
上面示例不仅将输出附加到文件末尾,而且还将输出打印在屏幕上。