我有一小段代码可以读取文件 $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”并破坏你的脚本。