O que significa “” exatamente em “echo temp.txt”?

2

Arquivo não existente

$ ls file_not_exists.txt
ls: cannot access file_not_exists.txt: No such file or directory
$ echo <> file_not_exists.txt

$ ls file_not_exists.txt 
file_not_exists.txt
$ cat file_not_exists.txt
$

Arquivo com conteúdo

$ cat temp.txt 
asdf
$ echo temp.txt 
temp.txt
$ echo <> temp.txt 

$ cat temp.txt 
asdf 

Se o arquivo não existir, echo <> file_not_exists.txt criará um novo arquivo. Então, acho que > funciona (redirecionando a saída vazia para um arquivo recém-criado). Mas se houver algo no arquivo (como temp.txt ), por que não é esvaziado por echo <> temp.txt ?

    
por user3872279 31.07.2014 / 08:42

2 respostas

3

Do Guia de script avançado de bash

[j]<>filename
  #  Open file "filename" for reading and writing,
  #+ and assign file descriptor "j" to it.
  #  If "filename" does not exist, create it.
  #  If file descriptor "j" is not specified, default to fd 0, stdin.
  #
  #  An application of this is writing at a specified place in a file. 
  echo 1234567890 > File    # Write string to "File".
  exec 3<> File             # Open "File" and assign fd 3 to it.
  read -n 4 <&3             # Read only 4 characters.
  echo -n . >&3             # Write a decimal point there.
  exec 3>&-                 # Close fd 3.
  cat File                  # ==> 1234.67890
  #  Random access, by golly.

Então,

echo <> temp.txt

Criará temp.txt , se não existir, e imprimirá uma linha vazia. Isso é tudo. É equivalente a:

touch temp.txt && echo

Nota, os programas most não esperam que o descritor de arquivo STDIN (0) esteja aberto para escrita, então em maioria casos, o seguinte será aproximadamente equivalente:

command <> file
command 0<> file
touch file && command < file

Como os programas mais não esperam que o STDOUT esteja aberto para leitura, os seguintes são geralmente equivalentes:

command 1<> file
command > file

E para STDERR:

command 2<> file
command &2> file
    
por 01.08.2014 / 04:16
1

echo <> temp.txt faz com que o arquivo temp.txt seja aberto para leitura e escrita no descritor de arquivo 0 (stdin).

De man bash :

Opening File Descriptors for Reading and Writing The redirection operator

          [n]<>word

   causes the file whose name is the expansion of word to be
   opened for both reading and writing on file descriptor n,
   or on file descriptor 0 if n is not  specified.   If  the
   file does not exist, it is created.
    
por 01.08.2014 / 04:16

Tags