1

У меня есть небольшой фрагмент кода, который читает файл, $ 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 ответ1

3

Читает ли какая-либо из ваших функций из стандартного ввода (например, команда 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" и сломать свой скрипт.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .