如何退出inotifywait

时间:2014-05-18 14:08:25

标签: shell inotifywait

我想监视给定的目录,直到出现某种情况。

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 $$似乎只会触发继续。 更糟糕的是 - 有时候,休息时效果很好 - 但很少。

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

答案来自:https://bbs.archlinux.org/viewtopic.php?id=186989