Qual é a função de & combinado com bash?

2

Qual é o objetivo de & como em &> e &>> no bash?

    
por LostSoul 05.10.2015 / 04:23

2 respostas

3

Ambos estão conectados ao redirecionamento de E / S conforme explicado aqui .

No caso de &> , isso redireciona a saída padrão (stdout) e a saída de erro padrão (stderr) para um arquivo. Por exemplo, vamos redirecionar a saída de data para um arquivo como este:

date &> foo.txt

Isso criaria - ou substituiria - um arquivo chamado foo.txt com a saída de date . E o conteúdo desse arquivo seria algo assim:

Sun Oct  4 22:37:58 EDT 2015

Mas, no caso de &>> , que redireciona a saída padrão (stdout) e a saída de erro padrão (stderr) para um arquivo. Mas o >> indica que o arquivo designado deve ser anexado e não sobrescrito se já existir.

Então, se eu executar este comando algumas vezes seguidas:

date &> foo.txt

Tudo que o foo.txt jamais teria é a saída da última vez que o comando foi executado, já que o único > indica que o conteúdo do arquivo seria sobrescrito a cada execução do comando.

Mas se eu executar este comando com o >> algumas vezes seguidas:

date &>> foo.txt

O arquivo foo.txt teria a saída de date anexada a ele assim:

Sun Oct  4 22:37:58 EDT 2015
Sun Oct  4 22:38:06 EDT 2015
Sun Oct  4 22:38:13 EDT 2015
Sun Oct  4 22:38:15 EDT 2015
Sun Oct  4 22:38:16 EDT 2015

Apenas observe que &>> parece não funcionar no Bash 3.x, mas funciona como esperado no Bash 4.x.

    
por 05.10.2015 / 04:38
0

Considere um comando chamado cmd :

cmd &>filename

O texto acima envia tanto o padrão do comando como o erro padrão para filename , sobrescrevendo tudo o que estava anteriormente naquele arquivo. É equivalente a:

cmd >filename 2>&1

A forma &>> é muito semelhante:

cmd &>>filename

Isso acrescenta o stdout e o stderr do cmd ao que já estava no arquivo filename . É equivalente a:

cmd >>filename 2>&1

Você pode ler mais sobre isso em man bash .

    
por 05.10.2015 / 04:38