注:该文章例子来自于网络的收集和整理,附带本人注解。
①I/O重定向的常用用法
符号 意义
cmd1 | cmd2 管道符,将cmd1的标准输出作为cmd2的标准输入。
> filename 将标准输出写到文件filename之中。
< filename 将文件filename的内容读入到标准输入之中。
>>filename 将标准输出写到文件filename之中,若filename文件已存在,则将标准输出追加到filename已有内容之后。
>|filename 即使noclobber选项已开启,仍然强制将标准输出写到文件filename之中,即将filename文件覆盖掉。
n>|filename 即使noclobber选项已开启,仍然使用FD为n以截断模式打开文件filename。
n> filename 使用FD为n以截断模式打开文件filename。
n< filename 使用FD为n以读取模式打开文件filename。
n>>filename 使用FD为n以追加模式打开文件filename。
<< delimiter 此处文档(Here-document)。
②exec命令的介绍
1,通过文件描述符打开或关闭文件。
2,将文件重定向到标准输入,及将标准输出重定向到文件。
3,exec命令重新设置了I/O重定向,要恢复为原来的I/O指向,还得需要使用exec命令显示指定。
exec用法:
&n :代表描述符代表的文件。
> < :代表以什么形式使用描述符。
exec 8<&2 :描述符8以读取方式打开标准错误对应的文件。
exec &>log:把标准输入错误打开文件log。
exec 8<&- :关闭描述符8。
1):run.sh脚本使用exec将stdin(标准输入)重定向到文件
root@37C:~# cat run.sh
#!/bin/bash
exec 8<&0 # 标准输入默认是指向了键盘,复制一份到 8 中,8 也指向了键盘。
exec 0< hfile # 1. 使用标准输入打开文件hfile。
read a # 2. read 将从stdin中读取命令。
read b
echo "---------------------------"
echo $a
echo $b
echo "Close FD 8:"
exec 0<&8 8<