我想监视给定的目录,直到出现某种情况。
ARCHIVE_PATH=$(inotifywait -m -r -q -e close_write -e moved_to --format '%w%f' /test | while read FILE; do
# ... Code ...
if [ $CONDITION ]; then
echo "$VALUE"
break
fi
done)
现在,无论我使用break
还是exit 0
,while循环都会继续。退出循环并将输出传递给变量的最佳方法是什么?
修改:
用break
替换kill -2 $$
似乎只会触发继续。
更糟糕的是 - 有时候,休息时效果很好 - 但很少。
答案 0 :(得分:0)
我现在通过发信号来做到这一点:
trap "exit 0" 10
ARCHIVE_PATH=$(inotifywait -m -r -q -e close_write -e moved_to --format '%w%f' /test | while read FILE; do
# ... Code ...
if [ $CONDITION ]; then
echo "$VALUE"
kill 10 $$
fi
done)
似乎shell不允许从子shell发送SIGINT
,因此我不得不发送另一个信号(SIGUSR1
)并将其捕获。
答案 1 :(得分:0)
试试这个:kill -2 -$$
或kill -SIGINT -$$
-$$
中的减号将信号发送给组中的所有进程。 $$
是当前流程。所以-$$
应该意味着:将此信号发送到当前进程组中的所有进程。
此手册页解释了更多:http://linux.die.net/man/1/kill