bash谜

这是一个普通的bash脚本 0.sh,它做一件耗时的工作(do_sth),希望调用 0.sh 时不要阻塞

#!/bin/bash
do_sth()
{
  sleep 3
}

main()
{
  do_sth &
  echo do sth in background ...
}

main

shell环境执行 0.sh 会马上返回,它把do_sth的任务放后台执行了

但如果这样

./0.sh | cat

发现竟然是阻塞的

于是在9行重定向的输出,1.sh | cat 时就不阻塞了

#!/bin/bash
do_sth()
{
  sleep 3
}

main()
{
  do_sth >/dev/null &
  echo do sth in background ...
}

main

但是在最后一行 main 后面重定向以后 2.sh | cat 又阻塞了

#!/bin/bash
do_sth()
{
  sleep 3
}

main()
{
  do_sth >/dev/null &
  echo do sth in background ...
}

main >/dev/null

琢磨了很久, 原来这次阻塞正式阻塞在 main 重定向这里

但是我不知道它为什么阻塞,在stackoverflow上问了个问题

http://stackoverflow.com/questions/32900636/why-is-my-bash-script-blocking

你可能感兴趣的:(bash谜)