redireciona para o mesmo arquivo que o arquivo de origem processado pelo comando [duplicate]

2
  1. O redirecionamento não é permitido aqui. O cat não está permitindo? Mas não é redirecionamento independente de qualquer comando executado com ele?

    $ cat bk > bk
    cat: bk: input file is output file
    
  2. Por que o seguinte redirecionamento esvazia o arquivo:

    $ less  bk > bk
    

    awk também funciona da mesma maneira que less em relação ao redirecionamento. awk é aquele com o qual eu realmente encontrei o problema, enquanto os exemplos acima são sem sentido

Em geral, qual é o caminho certo para usar o redirecionamento?

    
por Tim 04.11.2014 / 23:45

1 resposta

5

O problema é que o redirecionamento de saída mata o arquivo antes que less seja iniciado:

open("file", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
dup2(3, 1)                        = 1
close(3)                          = 0
execve("/usr/bin/less", ["less", "-WNS", "file"], [/* 102 vars */]) = 0

O redirecionamento de saída normal sobrescreve o arquivo. O O_TRUNC (consulte man 2 open ) exclui o conteúdo do arquivo.

    
por 05.11.2014 / 00:36