Shell 文件描述符

<pre name="code" class="sql">linux中使用文件描述符来标识每个文件对象。文件描述符为一个非负整数,可以唯一标识会话中打开的文件。每个过程最多可以有9个文件描述符。
    linux使用的标准文件描述符:
    标准输入STDIN就是0,标准输出STDOUT就是1,标准错误输出STDERR就是2。而我们也可以自己创建文件描述符3~8。

    将今天看到的一段代码:
1    #!/bin/bash
2    exec  3>&1
3    exec  1>test
4    echo "something to output file"
     ....
     ....
5    exec 1>&3
6    echo "Now things should be back"
    第二行代码使用文件描述符3指向文件描述符1的位置,即标准输出的位置,用于保存标准文件描述符1的位置。之后第三行代码将文件描述符1重定向到文件test,之后再执行后面的代码。在执行到

第5行代码时将文件描述符1又重新指向其原来位置。
    这种方法就是在脚本程序中临时将输出重定向然后再将输出恢复到通常设置的方法~还是会经常用到的.
标准输入STDIN就是0,标准输出STDOUT就是1,标准错误输出STDERR就是2。而我们也可以自己创建文件描述符3~8。


cmd 2>file	 把文件描述符2重定向到file,即把错误输出存到file中。
cmd > file 2>&1	 把标准错误重定向到标准输出,再重定向到file,即stderr和stdout都被输出到file中
cmd &> file	 功能与上一个相同,更为简便的写法。
cmd >& file	 功能仍与上一个相同。
cmd > f1 2>f2	 把stdout重定向到f1,而把stderr重定向到f2
tee files	 把stdout原样输出的同时,复制一份到files中。
tee files	 把stderr和stdout都输出到files中,同时输出到屏幕


[oracle@june2 ~]$ clear
[oracle@june2 ~]$ ls -ltr xxx
ls: xxx: 没有那个文件或目录


[oracle@june2 ~]$ ls -ltr xxx 2>file 


[oracle@june2 ~]$ cat file 
ls: xxx: 没有那个文件或目录


将错误输出到file 文件




[oracle@june2 ~]$ ls -ltr sqlplus.txt 1>file 




[oracle@june2 ~]$ cat file 
-rw-r--r-- 1 oracle dba 6283 07-25 15:41 sqlplus.txt


将标准输出到file



                                    
原文地址:https://www.cnblogs.com/hzcya1995/p/13352164.html