Bash中While循环的意外终止

时间:2016-03-09 23:17:19

标签: bash

以下代码片段用于递归搜索文件并迭代它们。

find . -type f -not -name '*.ini' -print0 | while IFS= read -r -d '' filename; do
   echo "$filename"
done

它给出了这个结果:

1.jpg
2.jpg
3.jpg

但是如果我想以某种方式处理文件

find . -type f -not -name '*.ini' -print0 | while IFS= read -r -d '' filename; do
   echo "$filename"
   echo "$(${ExternalApp} -someparams $filename 2> /dev/null| cut -f 2- -d: | cut -f 2- -d ' ' )"
done

循环在第一次迭代后终止,结果如下:

1.jpg

我最近更新了bash(我在MSYS的Windows上)。这里有什么问题?

1 个答案:

答案 0 :(得分:4)

该命令读取

find的输出。使用sshffmpegmplayer时,这是一个特别常见的问题。

如果根本不需要输入,您可以从/dev/null重定向:

find . -type f -not -name '*.ini' -print0 | while IFS= read -r -d '' filename; do
   echo "$filename"
   #                                            v-- here
   echo "$(${ExternalApp} -someparams $filename < /dev/null 2> /dev/null |
        cut -f 2- -d: | cut -f 2- -d ' ' )"  
done
相关问题