免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: tank064
打印 上一主题 下一主题

[文本处理] 使用fd重定向时疑惑 [复制链接]

论坛徽章:
1
2015亚冠之西悉尼流浪者
日期:2015-05-28 16:30:37
11 [报告]
发表于 2012-09-28 16:03 |只看该作者
回复 8# waker

waker  大哥  ,可以给小弟解释下吗?


   

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
12 [报告]
发表于 2012-09-28 16:36 |只看该作者
后面的保存到前面,和<>方向没关系

论坛徽章:
11
摩羯座
日期:2013-09-29 17:39:09白羊座
日期:2014-11-13 09:38:14技术图书徽章
日期:2014-01-17 15:07:36狮子座
日期:2013-12-25 14:01:52技术图书徽章
日期:2013-12-17 11:33:22技术图书徽章
日期:2013-12-03 10:27:57天秤座
日期:2013-11-08 15:47:19申猴
日期:2013-10-29 13:16:32未羊
日期:2013-10-12 22:28:56辰龙
日期:2013-10-09 14:39:5515-16赛季CBA联赛之山东
日期:2016-07-25 10:23:00
13 [报告]
发表于 2012-10-08 18:33 |只看该作者
回复 11# tank064
文件描述符和重定向

例1
  1. root@c-dev:/tmp# ls
  2. root@c-dev:/tmp#
  3. root@c-dev:/tmp# ls abc >test0 2>&1
  4. root@c-dev:/tmp#
  5. root@c-dev:/tmp# ls
  6. test0
  7. root@c-dev:/tmp# cat test0
  8. ls: 无法访问abc: 没有那个文件或目录
  9. root@c-dev:/tmp#
  10. root@c-dev:/tmp#
  11. root@c-dev:/tmp# ls def 2>&1 >test1
  12. ls: 无法访问def: 没有那个文件或目录
  13. root@c-dev:/tmp#
  14. root@c-dev:/tmp# ls
  15. test0  test1
  16. root@c-dev:/tmp#
  17. 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
  1. root@c-dev:/tmp# ls -l /var abc 1>&2 2>error.log
  2. /var:
  3. 总用量 44
  4. drwxr-xr-x  2 root root  4096  7月 13 06:25 backups
  5. drwxr-xr-x  6 root root  4096  5月 28 10:57 cache
  6. drwxr-xr-x 27 root root  4096  7月 12 19:08 lib
  7. drwxrwsr-x  2 root staff 4096  5月  1 19:12 local
  8. drwxrwxrwt  2 root root  4096  7月 19 10:50 lock
  9. drwxr-xr-x  7 root root  4096  7月 19 10:50 log
  10. drwxrwsr-x  2 root mail  4096  5月 28 10:57 mail
  11. drwxr-xr-x  2 root root  4096  5月 28 10:57 opt
  12. drwxr-xr-x  4 root root  4096  7月 19 10:50 run
  13. drwxr-xr-x  4 root root  4096  5月 28 11:12 spool
  14. drwxrwxrwt  2 root root  4096  5月  1 19:12 tmp
  15. root@c-dev:/tmp#
  16. root@c-dev:/tmp# cat error.log
  17. ls: 无法访问abc: 没有那个文件或目录
  18. root@c-dev:/tmp#
复制代码
ls -l /var abc 1>&2 2>error.log表示屏幕输出正确信息,错误信息保存在error.log文件中,同样是文件描述符的重新赋值操作

论坛徽章:
1
2015亚冠之西悉尼流浪者
日期:2015-05-28 16:30:37
14 [报告]
发表于 2012-10-09 15:02 |只看该作者
回复 13# superwujc

exec 6>&1    # 将fd 6与stdout 链接起来.  保存stdout.

那  2>&1     将fd2 与stdout链接起来,  以保存stdout          这里不能这么说吧?   


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP