为什么我的 bash for 循环在命令处挂起?
Why does my bash for loop hang at a command?
我正在使用 entr 检查是否有新文件添加到某些子目录,如果发生此类事件,我会使用 运行 命令。如果我有一个包含文件夹的目录:folder
、prefix_folder1
和 prefix_folder2
,那么我想监视后两个子目录中某个子目录中是否存在新文件,即监视 prefix_folder1/subdir
和 prefix_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
,如果在 prefix_folder1/subdir
.
中创建文件,则它不会 echo
“嘿”
我对 bash for 循环的理解在这种情况下是有限的,我不确定要查找哪些关键字来找到解决方案。
我想这就是你想要的:
while true
do
ls -d /Users/me/test/prefix*/subdir | entr -pd echo hey
done
这会将您要监视的所有目录一次传递给 entr
的单个调用,而不是为每个目录分别调用它。
您不需要在ls
命令中包含*
,因为它也会监控当前目录中的所有文件。
我正在使用 entr 检查是否有新文件添加到某些子目录,如果发生此类事件,我会使用 运行 命令。如果我有一个包含文件夹的目录:folder
、prefix_folder1
和 prefix_folder2
,那么我想监视后两个子目录中某个子目录中是否存在新文件,即监视 prefix_folder1/subdir
和 prefix_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
,如果在 prefix_folder1/subdir
.
echo
“嘿”
我对 bash for 循环的理解在这种情况下是有限的,我不确定要查找哪些关键字来找到解决方案。
我想这就是你想要的:
while true
do
ls -d /Users/me/test/prefix*/subdir | entr -pd echo hey
done
这会将您要监视的所有目录一次传递给 entr
的单个调用,而不是为每个目录分别调用它。
您不需要在ls
命令中包含*
,因为它也会监控当前目录中的所有文件。