
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。更多详细介绍可参见以下资料: