Who am I

我的照片
Hefei, Anhui, China
Research Fields: Satellite Geodesy

2012年2月10日星期五

shell文件描述符


文件描述符是将一个数字和一个文件名相关联起来的机制,然后使用这个编号向该文件进行读写。有时,文件描述符又称为文件句柄
标准输入(STDIN),0;标准输出(STDOUT),1;标准错误(STDERR),2
command n>file; command n>> file
标准输出重定向:command 1>filecommand 1>>file
标准输入重定向:command 0<file;
command 1>file1 2>file2:STDOUT重定向到file1STDERR重定向到file2

exec绑定重定向
上面所讲的输入输出重定向只对当前的指令有效,当需要多次将输入输出重定向到一个文件时,可以利用exec命令。格式如下:
输出重定向:
exex n>file exec n>>file
这里n是一个整数,文件file是打开的需要写入的文件。例:exec 4>fd4.out   fd4.out与文件描述符4相关联。
输入重定向:
exec n<file
STDOUTSTDERR重定向到一个文件
command >file 2>&1

使用文件描述符
cmd >&n           把输出送到文件描述符n
cmd m>&n        把输出到文件描述符m的信息重定向到文件描述符n(如2>&1
cmd >&-            关闭标准输出(等同于cmd 1>&-
cmd n>&-          关闭标准输出文件描述符n
cmd <&n           输入来自文件描述符n
cmd m<&n        m来自文件描述符n
cmd <&-            关闭标准输入(等同于cmd 0<&-
cmd n<&-          关闭输入文件描述符n
cmd <&n-          移动输入文件描述符n而非复制它
cmd >&n-          移动输出文件描述符n而非复制它

简单重定向补充
cmd <<< word  只把word和后面的换行作为输入提供给cmd(区别here document
cmd <> file        以读写模式把文件file重定向到输入

举例说明
echo “11111” > a.txt 等同于echo “11111” 1>a.txt
>重定向到文件时,会将文件清空,再写入。
> 1.txt 等同于 :>1.txt   清空文件内容
( ls tank; pwd )&>1.txt        将错误信息,以及输出内容放到1.txt文件中
上述语句等同于( ls tank; pwd ) >1.txt 2>&1
<>用法举例:
echo 123456 >2.txt
exec 4<>2.txt         #打开2.txt并将内容读取到&4
read –n 4 <&4        #&4中读取4个字符
echo –n . >&4        #&4中写入一个点
exec 4>&-             #关闭输出文件描述符4
        cat 2.txt                                    #结果为12345.6

没有评论:

发表评论