我正在使用fswatch
来跟踪目录的更改,但是如果存在某个文件(使用通配符),则希望此过程停止。此特定文件由另一个进程(不是在跟踪的目录中)由另一个进程(正在生成需要跟踪的更改)创建。
这是我试图做的事情:
while [[ $(shopt -s nullglob; set -- "${file_to_check}"; echo $#) -eq 1 ]]; do
fswatch "${path_to_the_tracked_directory}"
done && echo "Done"
但是,在${file_to_check}
出现后,此脚本不会终止。
条件中的复杂位是按照Bash check if file exists with double bracket test and wildcards
处理通配符编辑:
复杂位可以简化为:
while [ $(set -- "${path_to_the_file_to_check}"${file_to_check_with_wildcards}; echo $#) -eq 0 ]; do
fswatch "${path_to_the_tracked_directory}"
done && echo "Done"
答案 0 :(得分:0)
一种解决方案是使用-1/--one-event
选项(https://github.com/emcrisostomo/fswatch/wiki/How-to-Use-fswatch)。
然后代码看起来像:
while [ $(set -- "${path_to_the_file_to_check}"${file_to_check_with_wildcards}; echo $#) -eq 0 ]; do
fswatch -1 "${path_to_the_tracked_directory}"
done && echo "Done"