Altera um arquivo enquanto o redireciona como entrada stdin para um comando

0

No Bash, durante a execução de mycommand < myfile , modifico o conteúdo de myfile .

Qual conteúdo de myfile faz mycommand get? O mycommand obtém o conteúdo original de myfile quando eu comecei a executá-lo, ou ele recebe o conteúdo modificado de myfile junto com minha modificação?

    
por Tim 10.04.2016 / 09:18

1 resposta

3

Depende de qual mycommand faz. Se ele dorme por 10 minutos e depois começa a ler sua entrada padrão, ele verá suas modificações se elas já tiverem sido feitas. Se ele fizer uma primeira leitura de parte do arquivo, modificar o arquivo e fazer uma segunda leitura, ele verá as alterações que estão além do ponto lido.

Além disso, por causa do buffer usado por muitos programas, quando você pensa que seu comando só leu 1 linha, ele pode ter lido muito mais (um "buffer cheio", normalmente 8192 bytes).

Observe, no entanto, que os programas de edição geralmente excluem um arquivo e recriam um novo arquivo com as alterações. Nesse caso, seu programa ainda usará o conteúdo antigo do arquivo excluído e não verá nenhuma alteração. Isso ocorre porque quando você abre um arquivo, o nome do arquivo é convertido para o "inode" exclusivo ao qual ele corresponde e você não precisa mais do nome do arquivo. Se alguém remover o arquivo, este inode continuará a sobreviver enquanto algo ainda estiver aberto. Quando um novo arquivo é criado com o mesmo nome de arquivo, ele recebe um inode único diferente.

    
por 10.04.2016 / 09:27