免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6136 | 回复: 13
打印 上一主题 下一主题

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

论坛徽章:
1
2015亚冠之西悉尼流浪者
日期:2015-05-28 16:30:37
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-28 11:22 |只看该作者 |倒序浏览
本帖最后由 tank064 于 2012-09-28 11:23 编辑

#!/bin/bash

LOGFILE=logfile.txt
exec 6>&1           # 将fd #6与stdout 链接起来.
                    # 保存stdout.
exec > $LOGFILE     # stdout就被文件"logfile.txt" 所代替了.

# 在这块中所有命令的输出都会发送到文件$LOGFILE 中.

echo -n "Logfile: "
date
echo "-------------------------------------"
echo

echo "Output of \"ls -al\" command"
echo
ls -al
echo; echo
echo "Output of \"df\" command"
echo
df

exec 1>&6 6>&-      # 恢复stdout,  然后关闭文件描述符#6.

#############################################
这时abs_guide上的一个例子
疑惑:
exec 6>&1   ####用来保存sdtout ,为什么是这么写呢,我觉得应该是  1>&6这样才对。
exec 1>&6 6>&-  ######恢复stdout, 同样我觉得应该是   6>&1     

这个例子中 这两处是写反了还是我理解有误,请帮忙指正!

论坛徽章:
0
2 [报告]
发表于 2012-09-28 11:34 |只看该作者
龟腚
这个其实没必要去深究,就好像你需要修改一个文件,先对这个文件做备份一样

论坛徽章:
1
2015亚冠之西悉尼流浪者
日期:2015-05-28 16:30:37
3 [报告]
发表于 2012-09-28 11:48 |只看该作者
回复 2# where27
那 1>&6        6>&1   这样写的话,在这里是正确的么?


   

论坛徽章:
1
2015亚冠之西悉尼流浪者
日期:2015-05-28 16:30:37
4 [报告]
发表于 2012-09-28 12:12 |只看该作者
回复 1# tank064
没人帮满解答下吗?

   

论坛徽章:
0
5 [报告]
发表于 2012-09-28 13:00 |只看该作者
本帖最后由 where27 于 2012-09-28 13:01 编辑

回复 3# tank064


    反过来写当然是不对的,不然干嘛这么规定,你记着就好了,就不要纠结这种问题了吧

论坛徽章:
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
6 [报告]
发表于 2012-09-28 13:04 |只看该作者
tank064 发表于 2012-09-28 11:48
回复 2# where27
那 1>&6        6>&1   这样写的话,在这里是正确的么?

用变量A保存变量B,按你的理解应该写成 B=$A
大家的习惯却是A=$B

论坛徽章:
1
2015亚冠之西悉尼流浪者
日期:2015-05-28 16:30:37
7 [报告]
发表于 2012-09-28 14:14 |只看该作者
waker 发表于 2012-09-28 13:04
用变量A保存变量B,按你的理解应该写成 B=$A
大家的习惯却是A=$B




i>&j          fd i 重定向到 fd j     

6>&1        这里不就是把  fd 6  重定向到 stdout 了么   , 那这如何能 save  stdout 呢?   

论坛徽章:
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
8 [报告]
发表于 2012-09-28 14:25 |只看该作者
回复 7# tank064


    FD象个指针,指到哪儿就save哪儿

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

waker大大  这太抽象了,理解不了啊


   

论坛徽章:
1
2015亚冠之西悉尼流浪者
日期:2015-05-28 16:30:37
10 [报告]
发表于 2012-09-28 15:44 |只看该作者
本帖最后由 tank064 于 2012-09-28 15:46 编辑
tank064 发表于 2012-09-28 11:22
#!/bin/bash

LOGFILE=logfile.txt



exec 6<&0    ###fd6 与 stdin 联系起来,用以保存stdin
exec 6>&1    ###fd6 与 stdout 联系起来,用以保存 stdout

这两句话怎么理解 ,小弟在  i>&j   i<&j  这里 被这里重定向的方向弄晕了。
以我目前的理解,要保存stdin  ,应该把stdin重定向到另一个fd  ,所以 exec 6<&0   OK
                      要保存stdout, 应该把stdout重定向到另一个fd, 所以 exec 1>&6   
当第二句式不对的 ,一执行就报错了 " -bash: 6: Bad file descriptor "

这两行该如何理解呢,  还是说这是个 固定用法,没道理讲的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP