Limpando o arquivo por cat filename

-1

Os arquivos podem ser apagados usando %código%. É o mesmo arquivo especial que está trabalhando sempre que cat /dev/null > filename é feito?

    
por user3898709 25.07.2015 / 16:55

3 respostas

2

A resposta curta é Não.

Estas são duas técnicas diferentes de Limpando um arquivo de texto usando cat /dev/null > file e cat > file seguidos de Ctrl + C .

O redirecionamento > é usado para redirecionar a saída para algum arquivo. Por exemplo, date mostrará a hora e a data atuais em std out

$ date
Sat Jul 25 20:56:09 IST 2015

Se você usa,

$ date>/path/to/file

Em seguida, ele redirecionará stdout para file .

$ cat /path/to/file
Sat Jul 25 20:56:23 IST 2015

Como cat /dev/null>file limpa o conteúdo do arquivo

Ele apenas redireciona o conteúdo do dispositivo nulo /dev/null para o arquivo. Então o conteúdo é sobrescrito e fica vazio.

Como cat > file limpa o conteúdo do arquivo

cat Concatenar arquivo (s), ou entrada padrão, na saída padrão. Tome o seguinte exemplo,

$ cat
some text          # by user on stdin
some text          # stdin to stdout concatenated by cat
some other text    # by user on stdin
some other text    # stdin to stdout concatenated by cat
^C                 # Ctrl+C to terminate.

O comando cat > file aguardará stdin e redirecionará e substituirá o arquivo. Ele precisa ser parado usando Ctrl + C .

Se você não inserir nada no stdin e terminar o processo com SIGINT ( Ctrl+C ) sobrescreverá o arquivo com um espaço em branco.

O seguinte exemplo está aí para mais esclarecimentos:

$ cat > file
some text
some other text
^C
$ cat file
some text
some other text
    
por souravc 25.07.2015 / 17:49
1

Nenhum arquivo especial tem qualquer finalidade útil em nenhum dos casos.

cat /dev/null é exatamente um no-op, este comando não faz absolutamente nada de interesse e pode ser substituído por qualquer comando que não produza nada.

Você pode, por exemplo, limpar o conteúdo de um arquivo com qualquer um desses comandos:

printf > filename
true > filename
: > filename

ou mesmo, com muitos shells, usando nenhum comando, exceto o redirecionamento:

> filename

Por outro lado:

cat > filename

está redirecionando stdin , ou seja, tudo que você digita no teclado, para nome do arquivo. Se você interromper o comando cat antes de digitar qualquer coisa, o resultado também será um arquivo vazio, mas é um método bastante ineficiente para fazê-lo.

    
por jlliagre 25.07.2015 / 22:47
0

Não, o que está limpando o arquivo não é /dev/null , mas o redirecionamento > , que intrinsecamente trunca o próprio arquivo de saída antes de redirecionar a saída de cat .

  • cat /dev/null > filename : você está abrindo /dev/null e imprimindo seu "conteúdo" (nada) para stdout ; ao mesmo tempo em que um descritor de arquivo para filename é aberto, o arquivo é truncado e o stdout de cat é redirecionado para ele (portanto, nada é realmente redirecionado para o arquivo)
  • cat > filename : você não está imprimindo nada para stdout , porque não está especificando um arquivo e nem está passando stdin (o que faz com que cat esteja aguardando indefinidamente); ao mesmo tempo em que um descritor de arquivo para filename é aberto, o arquivo é truncado e o stdout de cat é redirecionado para ele (portanto, nada é realmente redirecionado para o arquivo)

Eles fazem exatamente a mesma coisa (em termos de limpar o arquivo), mas o primeiro abre um descritor de arquivo extra comparado com o segundo e o segundo espera indefinidamente por algo entrar em cat ' stdin . / p>

Os métodos equivalentes ao primeiro (e ao segundo resultado, mas sem o incômodo de esperar indefinidamente cat ) seriam:

$ echo -n | cat > file # empty pipe
$ <emptyfile cat > file # empty file
$ <<<'' cat > file # empty herestring
$ <<EOF cat > file
>EOF # empty heredoc
    
por kos 25.07.2015 / 17:36