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