我有一个文件 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在第一个版本中被滥用的位置/方式?
答案 0 :(得分:3)
停止分析1和分析2从stdin读取:
while read fnm; do
analysis1 $fnm </dev/null
analysis2 $fnm </dev/null
done < names.txt