bash脚本与后台进程

时间:2014-05-25 01:36:41

标签: bash background jobs

我的脚本中有以下内容:

#!/bin/bash

[ ! -S ./notify ] && find ./stylesheets/sass/ \-maxdepth 1 \-type f \-regex '.*/[^_][^/]*\.scss$' | entr \+notify &

此处entr的作用是将notify创建为命名管道。

[插入]

while read F; do
            ...
            #some processing on found files 
            #(does not matter for this question at all)
            ...
done < notify

问题是,第一次运行脚本时,它看到没有notify管道,所以它创建一个,然后放置 进入后台的过程。

但是后来的while循环抱怨它无法找到notify来读取。

然而,当我在那之后立即运行脚本时,现在第二次,它继续正常地继续 程序(while循环部分)。

我如何解决这个问题,所以它整体运行良好?

修改

如果我在上面插入[插入]占位符,

    sleep 1;

它有效,但我想要一个更好的解决方案来检查notify fifo 何时存在,有时可能需要超过1秒。

1 个答案:

答案 0 :(得分:1)

您始终可以轮询要创建的命名管道:

until [ -p notify ]; do read -t 0.1; done

如果您没有特别需要在运行之间维护变量,您还可以考虑使用脚本而不是委托+notify。这样可以避免这个问题。