bash中在管道或 {}& 语句块中的变量状态是不会反应到外部的,比如下面2个例子,
ret返回都是空字符串
cat $file | while read line ;
do
ret=$line
done
echo $line for i in `seq 5`;
do
{
test $i -le 4
if [ $? -ne 0 ];then
ret=1
fi
sleep 1
}&
done
echo $ret 有的时候我们需要把{}&块中的状态传出来,这是我设计的思路,利用命名管道,这样可以省去io操作:
rm ret
mkfifo ret
for i in `seq 5`;
do
{
test $i -le 4
if [ $? -ne 0 ];then
echo 1 > ret
fi
sleep 1
}&
done
ret_val=0
while read flags;
do
(( ++ ret_val ))
done < ret
echo $ret_val
本文介绍了在Bash脚本中如何解决管道及{}

1571

被折叠的 条评论
为什么被折叠?



