转向

一、首先简要的解释一下文件代码(这是我看的一本书上的定义):文件代码是指操作系统赋予已开启文件一个编号,由0开始,作为追踪文件之用,如对这个文件进行读取或写入的操作,都使用文件代码来作沟通。

       操作系统默认指定3个文件代码:0--标准输入(stdin)    1--标准输出(stdout)    2--标准错误(stderr)  

       以上这三个文件在建立shell环境时已开启,往后如果开启新文件,则分配3以上的号码。

        另外,平常我们用 >和< 的时候,都是commond > file 或者 commond < file, 其实这时候>左边默认代码1,<左边默认代码0。即commond 1> file        commond 0< file

二、文件操作

1、开启、关闭文件

示例:exec 6<>file

这里使用exec执行转向,开启文件file,并指定其文件代码为6

示例:exec 6<&-

关闭转向输入文件,关闭文件代码6

示例:exec 5>&-

关闭转向输出文件,关闭文件代码5

2、复制文件代码,建立文件链接

n<&m

复制转向输入的文件代码m,存成文件代码n,使n链接至m

n>&m

复制转向输出的文件代码m,存成文件代码n,是n链接至m

我对以上这些感觉是很抽象的,不明白他们的具体应用是什么,如果哪位大神有自己的见解,还请不吝指教。

三,一些用法

1、当我们用>的时候,commond>file,如果file不存在,那么会创建file;如果存在,则该文件的内容会被新内容覆盖。这里我们可以执行下面的命令

set -o noclobber 或者 set -C

来启用noclobber选项,这样当文件存在的时候就不会进行覆盖。

但还有一个 commond >| file 这样的形式,>|不会理会noclobber选项,只要文件存在就会强制覆盖

转向


2、常见的2>&1

这就是标准错误伴随标准输出做转向,从上面的介绍可以看出,就是将标准错误2链接至标准输出1。

常见形式是commond > file 2>&1,其实也可以写成commond &> file 或 commond >& file,也就是说标准输出已经重定向到file,而标准错误重定向到标准输出,即标准错误也重定向输出到file中。

那么为什么2>&1要放在最后呢?因为如果写成commond 2>&1 >file,此时现执行2>&1,但此时的标准输出还是终端,在执行>file,这个时候标准输出才重定向到了file当中,所以最后的执行结果标准错误还是在终端,而没有重定向到file当中。

你可能感兴趣的:(重定向,转向,2>&1)