Por que o redirecionamento do bash para um arquivo acontece no modo de acréscimo


Respostas:


19

O que está faltando é que você está abrindo (e truncando) o arquivo apenas fuma vez, na execchamada. Os dois echocomandos estão apenas gravando em um descritor de arquivo já aberto. O arquivo f, portanto, não será truncado por nenhuma das echochamadas.

Para redirecionar a saída padrão para um descritor de arquivo, a sintaxe é >&nonde nestá um pequeno número inteiro positivo que indica o descritor de arquivo (não há >>&nredirecionamento). O descritor de arquivo já deve estar associado a um arquivo aberto para que isso funcione. É o ato de abrir o arquivo e associá-lo a um descritor exec 3>fque trunca o arquivo ( exec 3>>fnão teria truncado o arquivo e o teria aberto no modo de acréscimo). Apenas escrever com >&3não abre o arquivo nem o trunca.

Teria sido diferente se você tivesse feito

echo foo >f
echo bar >f
cat f

(cada um echoé aberto e truncado f) ou, mais complicado,

exec 3>f; echo foo >&3
exec 3>f; echo bar >&3
exec 3>&- # close fd 3
cat f

(o arquivo é aberto e truncado execantes de cada um echo).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.