stdin会破坏项目的循环吗?

时间:2014-10-15 09:35:55

标签: bash for-loop

我有一个文件 names.txt ,其中包含数据文件的名称,如' data0.dat,data1.dat ... data10.dat'。我现在想在这些文件上循环bash命令。我通常使用

while read fnm; do
    analysis1 $fnm
    analysis2 $fnm
done < names.txt

但这对我现在不起作用。我怀疑它是因为某些命令采用stdin,和/或有些命令通过管道传输到/ dev / null:

while read fnm; do
    echo 0 5 | analysis1 $fnm
    analysis2 $fnm > /dev/null 2>&1
done < names.txt

我发现如果我改为使用构造

for next fnm in `cat names.txt`; do
    echo 0 5 | analysis1 $fnm
    analysis2 $fnm > /dev/null 2>&1
done

一切正常。有人可以解释这个或告诉我stdin在第一个版本中被滥用的位置/方式?

1 个答案:

答案 0 :(得分:3)

停止分析1和分析2从stdin读取:

while read fnm; do
  analysis1 $fnm </dev/null
  analysis2 $fnm </dev/null
done < names.txt