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