LinuxShell重定向和管道
Linux Shell 提供重定向符用于重定向命令的输入和输出,提供管道符用于将一个命令的输出重定向作为另一个命令的输入。
【注】在终端命令上,重定向符总是指向数据流动的方向。
1. 输出重定向
1.1 输出重定向符 >
1 | command > outputfile |
>
重定向符用于把 command
命令的输出结果重定向输入到指定的 outputfile
文件中。
-
如果 outputfile 不存在,则自动创建。
-
如果 outputfile 文件有内容,则全部覆盖。
1.2 输出重定向符 >>
1 | command >> outputfile |
>>
重定向符用于把 command
命令的输出结果重定向追加到指定的 outputfile
文件中。
-
如果
outputfile
不存在,则自动创建。 -
如果
outputfile
文件有内容,则继续追加到文件末尾。
2. 输入重定向
2.1 输入重定向符 <
1 | command < inputfile |
<
重定向符用于将文件中的内容重定向输入给 command
处理。
2.2 输入重定向符 <<
1 | command << marker |
<<
重定向符也被成为内联输入重定向符,该输入重定向用于从命令行中指定用于输入重定向的数据,而不用使用文件进行输入重定向。
其中,data
是指定用于输入重定向的数据,marker
为文本标记(可用任何字符串作为文本标记),用于划分输入数据的开始和结尾。
marker
仅被字符串看待,不会被扩展成变量、命令、算术表达式等。marker
中如果没有任何一部分被引号包裹,则输入数据data
中每一行数据将扩展变量、命令、算术表达式(因此若要使用特殊字符诸如$
则需进行转义\$
)。marker
中如果有任何一部分被引号包裹,则输入数据data
中的每一行数据将只被看作为字符串处理。- 如果在输入重定向符
<<
后加上-
,即<<-
,则在读取输入数据data
的每一行数据时,其前导 Tab 会被忽略。
内联输入重定向符可以用来在 Shell 中进行自动交互,以
ssh-keygen
命令为例:
1
2
3
4
5
6
7
ssh-keygen -t rsa -C "example@163.com" << EOF
$HOME/Tmp/example
EOF这样就能实现
ssh-keygen
自动生成密钥并保存的功能,而不需要通过人为手动输入来进行交互。
【注】更多自动交互方法参见 LinuxShell自动交互。
3. 管道
1 | command1 | command2 |
|
用于将 command1
的输出重定向作为 command2
的输入:
-
command1
的输出会被实时重定向到command2
的输入,中间数据传输不会用到任何中间文件或缓冲区。 -
Linux 系统实际上会同时运行
command1
和command2
,并在内部将它们连接起来。而不是表面看起来先运行command1
然后在运行command2
。
附录
更多详细介绍可参见以下资料: