Comportamento inconsistente ao modificar o arquivo no local com cat, sort, tee e pipes [duplicate]

0

Situação : ao usar o seguinte comando:

cat foo | sort | tee foo

onde foo é um arquivo de texto de várias linhas, o resultado não é consistente. Os dois resultados que observei são:

  1. O arquivo é classificado e o conteúdo classificado é impresso em stdout.
  2. O arquivo é esvaziado e nada é impresso.

Pergunta : Por que isso acontece?

P.S. Eu percebo que sort tem uma opção -o no meu sistema.

    
por Eloston 28.12.2017 / 09:42

1 resposta

0

Você cria uma condição de corrida. Você inicia dois comandos (em ambos os lados do pipeline) que tentam acessar o mesmo arquivo de maneiras diferentes (leitura vs. apagar). O resultado é o acaso.

cat foo | sort | ( tee foo.new; mv foo.new foo)
    
por 28.12.2017 / 09:59