Chinaunix首页 | 论坛 | 博客
  • 博客访问: 67657
  • 博文数量: 10
  • 博客积分: 251
  • 博客等级: 二等列兵
  • 技术积分: 115
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-27 23:25
文章分类
文章存档

2012年(7)

2011年(3)

分类: LINUX

2012-02-08 21:43:03

今天遇到个很恶心的问题,之前写的两个shell脚本,一个调用的另一个,只需要获取被调用脚本的退出码即可,由于种种变化,现在父shell必须从子shell中再得到一个字符串,不能通过返回值,也不能通过环境变量,因为子进程不能改变父进程的环境变量。于是想到用命名管道,但写起来有点儿恶心,读写命名管道都是阻塞的,一不小心就死锁了。
father.sh
  1. #!/bin/bash
  2. if ! [ -e myfifo ];then
  3. mkfifo myfifo
  4. fi
  5. ./child.sh &
  6. tmp=`cat myfifo`
  7. read ret str <<< "$tmp"
  8. echo "ret=$ret str=$str"
child.sh 
  1. #!/bin/bash
  2. str="hello"
  3. ret=100
  4. if [ -e myfifo ];then
  5. echo "$ret $str" >> myfifo
  6. fi
  7. exit $ret
  1. ./child.sh &
  2. tmp=`cat myfifo`
  3. 上面两行不能交换,且&不能去掉
阅读(2091) | 评论(0) | 转发(0) |
0

上一篇:oom killer

下一篇:killall

给主人留下些什么吧!~~