什么是输入/输出(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重定向利用重定向建立多行文件
-
cat << EOF > example.txt 第一行内容 第二行内容 第三行内容 ... EOF
-
替换"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重定向功能。通过改变程序的标准输入、输出和错误输出的默认设备,我们可以更好地控制程序的输入输出流,提高程序的可用性和灵活性。