2

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

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)

现在,无论我使用breakor exit 0,while 循环都会继续。那么退出循环并将输出传递给变量的最佳方法是什么?

编辑

替换breakkill -2 $$似乎只会触发继续。更糟糕的是 - 有时 break 工作正常 - 但很少。

4

2 回答 2

1

试试这个:kill -2 -$$kill -SIGINT -$$

减号 -$$将信号发送到组中的所有进程。$$是当前进程。所以-$$应该意思是:把这个信号发送给当前进程所在组中的所有进程。

此手册页解释更多: http: //linux.die.net/man/1/kill

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

于 2015-07-07T09:00:51.687 回答
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)

似乎外壳不允许SIGINT从子外壳左右发送,因此我不得不发送另一个信号(SIGUSR1)并捕获它。

于 2014-05-19T18:40:28.453 回答