所谓I/O重定向简单来说就是一个过程,这个过程捕捉一个文件,或者命令,程序,脚本,甚至脚本中的代码块的输出,然后把捕捉到的输出,作为输入
发送给另外一个文件,命令,程序,或者脚本。谈到I/O重定向,就涉及到文件标识符(File Descriptor)的概念, 在Linux系统中,系统为每一个打开的文件
指定一个文件标识符以便系统对文件进行跟踪,文件标识符是一个数字,不同数字代表不同的含义,默认情况下,系统占用了3个,分别是
0标准输入(stdin)(键盘输入)
1标准输出(stdout) (屏幕输出)
2标准错误(stderr) (屏幕输出)
3-9是保留的标识符
请看以下例子,来描述一下他们的关系
ls /dev #/dev 就是作为命令ls的标准输入,而打印在屏幕的结果就是标准输出
重定向就是把标准的输入或者输出更改成其他的方式,如:
ls /dev 1>filename
ls /dev >filename #同上等效 不指明文件标识符,系统默认的就是1
ls /dev >>filename #追加输出
ls /dev &>filename #"&"在这里代表标准输出和标准错误
i>&j命令,表示把文件标识符i重新定向到j,"&"理解为"取地址"
exec 2>&1
表示把标准错误重定向到标准输出
grep search-word
这个命令会让你从键盘输入的字符中查询
grep search-word <filename
等同于
grep search-word filename
文件标识符操作:
n<&- 关闭输入文件标识符n 0<&-或<&- 关闭标准输入stdin
n>&- 关闭输出文件标识符n 1>&-或>&- 关闭标准输出stdout
n<>filename 表示把文件打开,并指明文件标识符为n
>filename 清空文件
实例:
1 echo 123456789 >filename #把字符串写到文件filename中 2 exec 3<>filename #把文件filename打开,并指定文件标识符为3 3 read -n 4 <&3 #从文件中读4个字符 4 echo -n . >&3 #在第5个字符处写一个点,覆盖第5个字符,-n表示不换行 5 exec 3>&- #关闭文件标识符3
出处: