为什么我的bash for循环挂在命令上



我正在使用entr来检查是否有新文件添加到某些子目录中,并在发生此类事件时运行命令。如果我有一个包含文件夹的目录:folderprefix_folder1prefix_folder2,那么我想监视后两个目录中某个子目录中是否存在新文件,即监视prefix_folder1/subdirprefix_folder2/subdir

这是我目前的无限循环方法:

1 #!/bin/bash
2 
3 trap "exit" INT # in case of ^C
4 while true
5 do
6     for stage in $(ls '/Users/me/test')
7     do
8         if [[ "$stage" == "prefix"* ]]; then #check for prefix
9             ls -d * /Users/me/test/$stage/subdir | entr -pd echo hey
10 
11         fi
12     done
13 done

但是,对于每个目录,脚本都挂在第9行,直到创建新文件为止。例如,如果它处于prefix_folder2/subdir,则它将不处于echo〃;嘿"如果在CCD_ 8。

在这种情况下,我对bash for循环的理解是有限的,我不确定应该查找什么关键字来找到解决方案。

我想这就是你想要的:

while true
do
ls -d /Users/me/test/prefix*/subdir | entr -pd echo hey
done

这将一次将要监视的所有目录传递给entr的单个调用,而不是为每个目录单独调用它。

您不需要在ls命令中包含*,因为这也将监视当前目录中的所有文件。

相关内容

  • 没有找到相关文章

最新更新