Shell 重定向输入和输出
- 2021-09-21 17:28:04
- admin
- 1895
- 最后编辑:admin 于 2021-09-26 10:22:05
输出重定向
平时我们敲命令时,其标准输出是显示在终端窗口中。除此之外,Shell 可以将命令的输出重定向到另一个位置(比如文件)。
最基本的重定向是将命令的输出发送到一个文件中。使用重定向操作符 > 实现。
command > outputfile
实例:
将根目录下的目录详情重定向保存到 test.txt 文件中。
$ ll -a > /data/test.txt
打开 test.txt,可以看到里面的内容:
注意:如果输出文件已经存在了,重定向操作符会用新的文件数据覆盖已有文件。
如果不想覆盖文件原有内容,而是想将命令的输出追加到已有文件中,可以用双大于号 >> 来追加数据。
command >> outputfile
输入重定向
将文件的内容重定向到命令。(与输出重定向相反),用小于号 < 实现。
command < inputfile
实例:
我们将上面那个例子反过来看,通过将 test.txt 的内容重定向给 wc 命令,从而得到文件中内容的行数。
$ wc -l < /data/test.txt 27
记忆方法:在命令行上,命令总是在左侧,而重定向符号“指向”数据流动的方向。
内联输入重定向
除了使用文件进行输入重定向,Shell 还支持在命令行中直接指定用于输入重定向的数据。使用 << ,以及首尾一致的文本标记来实现。
command << marker data marker
实例:
$ wc -l << EOF heredoc> hello world1 heredoc> hello world2 heredoc> hello world3 heredoc> EOF 3
管道
有时我们需要将一个命令的输出作为另一个命令的输入。但如果先通过命令输出重定向到文件,再从文件重定向到命令,这种方式可用但太繁琐。我们可以将命令输出直接重定向到另一个命令,这个过程叫作管道连接。
管道符号为竖线: | 放在两个命令之间,将一个命令的输出重定向到另一个命令。
command1 | command2
linux会同时运行这两个命令,在系统内部将他们连接起来。在第一个命令产生输出的同时,输出会被立即送给第二个命令。
实例:
依旧借助前面的例子,我们将 ll -a 命令的输出直接通过管道传输给 wc -l ,得到行数。
$ ll -a | wc -l 27
可以在一条命令中使用多条管道,可以持续地将命令的输出通过管道传给其他命令进行细化操作。
command1 | command2 | command3
记忆方法:竖线可以想象成是连接两个命令的管道,数据流总是从左往右“流动”。从命令1流向命令2,再从命令2流向命令3……