lê cada linha: em tempo real ou de uma só vez?

2

Estou executando um script como este:

while IFS=$'\r' read -r line || [[ -n "$line" ]]; do
    something
done < "$1"

Basicamente, ele lê um arquivo de texto (como $1 ) e "faz alguma coisa" para cada linha.

O arquivo de texto tem 20 linhas. Se eu modificar o arquivo de texto agora adicionando uma linha (linha 21) quando o script estiver rodando e trabalhando na linha 10, ele funcionará na linha 21 depois?

Em outras palavras, como o script lê o arquivo de texto? Leia o arquivo inteiro de uma vez no início, ou cada linha, uma por uma, quando necessário?

    
por michael morgan 11.03.2018 / 05:30

1 resposta

1

Parece que está lendo uma linha por vez, em vez de ler todo o arquivo na memória de uma só vez. Eu fiz um pequeno teste para você:

Crie um arquivo contendo 3 linhas:

$ echo -e "Line 1\nLine 2\nLine 3" >> teslines.txt
$ cat testlines.txt
Line 1
Line 2
Line 3

Crie este pequeno script:

#!/bin/bash

while read LINE; do
    echo "$LINE"
    sleep 2
done < testlines.txt

Execute o script e comece a adicionar novas linhas:

$ ./readlinetest.sh
Line 1

# Somewhere around here i started adding more lines to the file:
$ echo "Line 4" >> testlines.txt
$ echo "Line 5" >> testlines.txt
$ echo "Line 6" >> testlines.txt
$ echo "Line 7" >> testlines.txt

# Output continued:
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7

Funciona praticamente como tail -f em algum log ao vivo.

    
por 11.03.2018 / 09:41