2014-02-24 13 views
0

有没有人知道为什么在第一次迭代后,我不在while循环中?它曾经像昨天一样工作! (含多条线路,没有新线相同的输入文件)问题read_file在Bash中使用while循环/ sh

#!/bin/sh 
FLAGS_IN=MY_TEXT_FILE_CONTAINING_LOTS_OF_LINE 

while read BENCHMARK DATASET CF 
do 
    echo "$BENCHMARK" 
    echo "$DATASET" 
    echo "$CF" 
    N=$((N + 1))  

cd $tmp  
echo "**********************************************************" 
      GCC_OPT="-O3" 
      OPT_FLAGS=$CF 
###### do sth 



tmp=$PWD 
done < $FLAGS_IN 

exit 0 

调试,我可以肯定的脚本工作,直到循环精致漂亮的尽头。

+1

为VAR'tmp'将作为'cd' CMD评估没有一个空值论点,并发送你的脚本给你的家庭目录。您不会在代码中包含任何类似“tmp =/tmp/dir”的内容,因此我们无法确定发生了什么。为什么在阅读每行后需要'cd $ tmp'?否则,如果它曾经工作,并且今天不工作,并且如果您真的**没有对脚本进行任何更改,或者将它从MSWindows ftp到Linux,那么它必须是您的数据文件。使用二进制模式的文本编辑器来查看第一行之后的内容。祝你好运。 – shellter

+0

@shellter,tnx回复。实际上我在开始的某个地方使用了这个'tmp',而我正在移动一些目录,这就是为什么最后我想回到 – Amir

回答

2

您的#do sth显然包含从标准输入中读取的命令,因此下次执行read时,会到达流的末尾。挑选你不使用(3可能是安全的)的文件句柄,并用它为您while循环:

while read BENCHMARK DATASET CF <&3 
do 
    # ... 
done 3< $FLAGS_IN 
+0

非常感谢,我花了一个小时,完全不知道发生了什么,这个文件句柄现在正在为我工​​作 – Amir