-
通用格式
[n]
表示fd[n]
{varname} > word
表示fd[varname]
,存储的文件对象是word
fd[0]存储的文件对象是stdin;fd[1]存储的文件对象是stdout;fd[2]存储的文件对象是stderr;
[n]>&[m]
表示的fd[n]=fd[m]
.所以对于2>&1
等价于fd[2]=fd[1]
如上所示的对应:修改后
fd[2]==stdout;fd[1]==stdout
,即输出错误输出到标准输出。2&>word
表示>word 2>&1
等价于fd[1]=word;fd[2]=fd[1]
则
fd[2]==word,fd[1]==word
,所以标准输出,标准错误都输出到文件word
中。[n]&>-
这种表示关闭fd[n]
所对应的文件对象文件描述符
。[n]&>digit-
表示digit顶替n
然后关掉n
<>
同时输入输出sprintf
,最后文件啥样不可而知。
-
解析顺序
- 重定向在指令之前处理,所以你可以在一条指令的任意位置进行重定向。
>1 ls
也是可以的ls >1 -l
也是可以的
- 重定向的处理从左到右。
- 重定向在指令之前处理,所以你可以在一条指令的任意位置进行重定向。
-
处理文件描述符
-
使用
tcp
进行通讯
-
-
每次重定向之后
0,1,2
都会复原。 -
默认值
[n]<
的n
默认为0
[n]>
的n
默认为1
[n]<<
的n
默认为0
[n]>>
的n
默认为1
[n]<&
的n
默认为0
[n]>&
的n
默认为1
[n]>&digit-
的n
默认为0
[n]<&digit-
的n
默认为1
-
细节上的问题
- 重定向后的
word
进行了扩张之后,结果必须是一个单词,多个则会出错。 [n]>[|]word
这种重定向,支持一种友好的方式,如果>|
使用这个,且环境变量设置了set noclobber
,且使用的是|
,那么将会判断是否存在,如果存在则报错。这样就可以避免重要文件丢失。- 自带的
while( input() != key )
.[n]<<[−]word here-document delimiter
输入多行,输入的单词支持扩张,和普通shell类似,直到结束的
word
出现。必须是单独的一行,一字不差的全部匹配。-
表示去掉前置的空格。 <<<
允许字符串直接重定向,这种也可以扩张。
- 重定向后的
-
特殊的文件
这些文件都是不存在的,是虚拟的。如果存在,则当成普通文件处理。所以谨慎使用。
/dev/fd/fd
文件描述符/dev/stdin
标准输入/dev/stdout
标准输出/dev/stderr
标准错误/dev/tcp/host/port
host可以使网址可以是IP,端口也需要合法,然后开启TCP
连接并赋值。/dev/udp/host/port
同上
来源:oschina
链接:https://my.oschina.net/u/3695598/blog/4259348