I/O重定向学习感悟与笔记

发布时间 2023-11-25 08:42:31作者: 鬖千

什么是输入/输出(I/O)重定向?

I/O重定向是指改变程序的标准输入、标准输出和标准错误输出的默认设备,将其与其他设备或文件进行关联。通过I/O重定向,我们可以将程序的输入从键盘转向文件或其他设备,将程序的输出和错误信息输出到文件或其他设备而不是屏幕上。

标准输入重定向

标准输入重定向使用 < 符号来实现,它将一个文件中的内容作为程序的输入。例如,假设我们有一个名为lin.txt的文件,其中包含了一些输入数据,我们可以通过以下方式将该文件内容作为程序的输入:

$ ./program <lin.txt
这样,程序将会读取lin.txt中的内容作为输入,而不是等待用户在终端中手动输入。

  • <<符号

此外,还可以<<EOF通过手动输入直到输入EOF(或者Ctrl-D)。

标准输出重定向

标准输出重定向使用 > 符号来实现,它将程序的输出保存到一个文件中。例如,我们可以通过以下方式将程序的输出保存到tun.txt文件中:

$ ./program > tun.txt

追加输出

可以采用>>将输出重定向到文件并追加在文件结尾,这样就可以避免覆盖文件了。

 

重定向标准输出和错误到同一个文件

可能有这种情况,我们希望捕捉一个命令的所有输出到一个文件。为了完成这个,我们必须同时重定向标准输出和标准错误。有两种方法来完成任务。

  • 第一个,传统的方法, 在旧版本 shell 中也有效:ls -l /bin/usr > ls-output.txt 2>&1
  • 使用这种方法,我们完成两个重定向。首先重定向标准输出到文件 ls-output.txt,然后 重定向文件描述符 2(标准错误)到文件描述符 1(标准输出)使用表示法 2>&1。

 

  • 现在的 bash 版本提供了第二种方法,更精简合理的方法来执行这种联合的重定向:ls -l /bin/usr &> ls-output.txt

 

 

I/O重定向利用重定向建立多行文件

  1. cat << EOF > example.txt
    第一行内容
    第二行内容
    第三行内容
    ...
    EOF
  2. 替换"example.txt"为你想要创建的文件名,并在EOF标记之间输入你想要写入文件的内容。

无论你选择哪种方法,都可以通过重定向操作将文本写入文件。例如,在命令行中使用">"符号将输出重定向到文件:

echo "第一行内容" > example.txt
echo "第二行内容" >> example.txt
echo "第三行内容" >> example.txt

这将创建一个名为example.txt的文件,并将每行内容写入该文件。

请注意,如果文件已经存在,使用">"将会覆盖整个文件内容,而使用">>"将在文件末尾追加内容。

 

tee - 从 Stdin 读取数据,并同时输出到 Stdout 和文件

tee 程序从标准输入读入数据,并且同时复制数据 到标准输出(允许数据继续随着管道线流动)和一个或多个文件。当在某个中间处理 阶段来捕捉一个管道线的内容时,这很有帮助。来看个例子,我们在 grep 过滤管道线的内容之前,来捕捉整个目录列表到文件 ls.txt:

ls /usr/bin | tee ls.txt | grep zip

总结

I/O重定向功能。通过改变程序的标准输入、输出和错误输出的默认设备,我们可以更好地控制程序的输入输出流,提高程序的可用性和灵活性。