Usando um loop while para ler um arquivo, pára aleatoriamente a leitura do arquivo no meio [closed]

1

Eu tenho uma pequena seção de código que lê um arquivo, $ FUNCTION_FILE, que contém uma lista de nomes de funções no formato:

func1
func2
func3

Ele irá ler uma linha, executar a função e repetir até que o arquivo seja concluído. Aqui está um trecho:

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

    $func
done <$FUNCTION_FILE

Entrei em uma situação em que, às vezes, essa seção do código para de ler o "$ FUNCTION_FILE" antes de terminar e seguir em frente com o restante do script. Às vezes, só lê a primeira linha e pula o resto, às vezes apenas a segunda linha; Eu nunca vejo a mensagem "LINE_NUMBER = $ LINE_NUMBER" para as linhas subseqüentes.

Supondo que o arquivo esteja correto, quais são algumas coisas que podem causar esse problema?

    
por noisesolo 23.01.2014 / 15:31

1 resposta

3

Alguma de suas funções lê de stdin (ex: o comando read )? Se assim for, isso vai sugar o resto do FUNCTION_FILE.

Altere o loop while para usar um descritor de arquivo diferente:

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

Saia do hábito de usar ALL_CAPS_VARIABLES - um dia você acidentalmente usará "PATH" e quebrará seu script.

    
por 23.01.2014 / 17:02