- 论坛徽章:
- 11
|
回复 11# tank064
文件描述符和重定向
例1- root@c-dev:/tmp# ls
- root@c-dev:/tmp#
- root@c-dev:/tmp# ls abc >test0 2>&1
- root@c-dev:/tmp#
- root@c-dev:/tmp# ls
- test0
- root@c-dev:/tmp# cat test0
- ls: 无法访问abc: 没有那个文件或目录
- root@c-dev:/tmp#
- root@c-dev:/tmp#
- root@c-dev:/tmp# ls def 2>&1 >test1
- ls: 无法访问def: 没有那个文件或目录
- root@c-dev:/tmp#
- root@c-dev:/tmp# ls
- test0 test1
- root@c-dev:/tmp#
- root@c-dev:/tmp# cat test1
复制代码 首先,用Fd0,Fd1和Fd2分别表示文件描述符0,1和2, file descriptor
文件的准确表示为文件对应的文件描述符
默认情况下
Fd0 = stdin(标准输入,键盘)
Fd1 = stdout (标准输出,屏幕)
Fd2 = stderr (标准错误输出,屏幕)
ls abc >test0 2>&1表示两个赋值操作
Fd1 = 文件
Fd2 = Fd1
结果为Fd1和Fd2都指向文件,屏幕输出为空
ls def 2>&1 >test1同样表示两个赋值操作
Fd2 = Fd1 (将Fd1的值,即标准输出赋值给Fd2,这样,标准错误输出现在为屏幕)
Fd1 = 文件 (将文件赋值给文件描述符1,即标准输出,这样,标准输出现在为文件)
结果是Fd2指向标准输出,Fd1指向文件,屏幕输出错误信息,文件中的内容为ls def的结果,因为def不存在,所以没有属性,故文件为空
例2- root@c-dev:/tmp# ls -l /var abc 1>&2 2>error.log
- /var:
- 总用量 44
- drwxr-xr-x 2 root root 4096 7月 13 06:25 backups
- drwxr-xr-x 6 root root 4096 5月 28 10:57 cache
- drwxr-xr-x 27 root root 4096 7月 12 19:08 lib
- drwxrwsr-x 2 root staff 4096 5月 1 19:12 local
- drwxrwxrwt 2 root root 4096 7月 19 10:50 lock
- drwxr-xr-x 7 root root 4096 7月 19 10:50 log
- drwxrwsr-x 2 root mail 4096 5月 28 10:57 mail
- drwxr-xr-x 2 root root 4096 5月 28 10:57 opt
- drwxr-xr-x 4 root root 4096 7月 19 10:50 run
- drwxr-xr-x 4 root root 4096 5月 28 11:12 spool
- drwxrwxrwt 2 root root 4096 5月 1 19:12 tmp
- root@c-dev:/tmp#
- root@c-dev:/tmp# cat error.log
- ls: 无法访问abc: 没有那个文件或目录
- root@c-dev:/tmp#
复制代码 ls -l /var abc 1>&2 2>error.log表示屏幕输出正确信息,错误信息保存在error.log文件中,同样是文件描述符的重新赋值操作 |
|