注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

冷月寒星

 
 
 

日志

 
 

Linux Shell Bash 使用exec  

2011-03-09 12:48:11|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

exec <filename命令会将stdin重定向到文件中. 从这句开始, 所有的stdin就都来自于这个文件了, 而不是标准输入(通常都是键盘输入). 这样就提供了一种按行读取文件的方法, 并且可以使用sed和/或awk来对每一行进行分析.


PID的脚本或shell来说, 从这句命令执行之后, 就会重定向到这个文件中, 然而 . . .

N > filename只会影响新fork出来的进程, 而不会影响整个脚本或shell. not the entire script or shell.

感谢你, Ahmed Darwish, 指出这个问题.


子shell中不可访问变量问题的方法.

例子 16-4. 避免子shell

1 #!/bin/bash

2 # avoid-subshell.sh

3 # 由Matthew Walker所提出的建议.

5 Lines=0

7 echo

9 cat myfile.txt | while read line; # (译者注: 管道会产生子shell)

10  do {

11  echo $line

12  (( Lines++ )); # 增加这个变量的值

13  #+ 但是外部循环却不能访问.

14  # 子shell问题.

15  }

16  done

17 

18 echo "Number of lines read = $Lines" # 0

19  # 错误!

20 

21 echo "------------------------"

22 

23 

24 exec 3<> myfile.txt

25 while read line <&3

26 do {

27  echo "$line"

28  (( Lines++ )); # 增加这个变量的值

29  #+ 现在外部循环就可以访问了.

30  # 没有子shell, 现在就没问题了.

31 }

32 done

33 exec 3>&-

34 

35 echo "Number of lines read = $Lines" # 8

36 

37 echo

38 

39 exit 0

40 

41 # 下边这些行是这个脚本的结果, 脚本是不会走到这里的.

42 

43 $ cat myfile.txt

44 

45 Line 1.

46 Line 2.

47 Line 3.

48 Line 4.

49 Line 5.

50 Line 6.

51 Line 7.

52 Line 8.

  评论这张
 
阅读(262)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018