使用while循环读取文件,在中间随机停止读取文件

使用while循环读取文件,在中间随机停止读取文件

我有一小段代码可以读取文件 $FUNCTION_FILE,其中包含以下格式的函数名称列表:

func1
func2
func3

它将读取一行,运行函数,并重复,直到文件完成。以下是代码片段:

while read line; do
    LINE_NUMBER=`expr $LINE_NUMBER + 1`
    echo "LINE_NUMBER=$LINE_NUMBER"

    $func
done <$FUNCTION_FILE

我遇到过这种情况:有时这段代码会在完成之前停止读取“$FUNCTION_FILE”,然后继续执行脚本的其余部分。有时它只读取第一行并跳过其余部分,有时只读取第二行;我也从未看到后续行的“LINE_NUMBER=$LINE_NUMBER”消息。

假设该文件正确,那么哪些因素可能会导致我所看到的这个问题?

答案1

您的任何函数是否从 stdin 读取数据(例如:命令read)?如果是,则会吞噬 FUNCTION_FILE 的其余部分。

更改 while 循环以使用不同的文件描述符:

line_num=0
while read -u3 line; do
    echo "LINE_NUMBER=$(( ++line_num ))"
    $func
done 3<"$function_file"

摆脱使用 ALL_CAPS_VARIABLES 的习惯——有一天你会不小心使用“PATH”并破坏你的脚本。

相关内容