我的脚本中有以下内容:
#!/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秒。
答案 0 :(得分:1)
您始终可以轮询要创建的命名管道:
until [ -p notify ]; do read -t 0.1; done
如果您没有特别需要在运行之间维护变量,您还可以考虑使用脚本而不是委托+notify
。这样可以避免这个问题。