C (por exemplo, csh
, tcsh
) e o invólucro Bourne (por exemplo, sh
, bash
) são duas famílias de casca. Estes dois têm diferenças nas sintaxes e na implementação de várias operações.
Os exemplos que você mostrou são como essas duas famílias manipulam o redirecionamento de descritores de arquivos. Ambos os comandos estão redirecionando STDERR (descritor de arquivo 2) para STDOUT (descritor de arquivo 1), enviando STDOUT para o arquivo config.out
, portanto, todos os STDOUT e STDERR estão sendo redirecionados para o arquivo. E também enviando o comando para background por &
no final.
Historicamente, o shell C usa >&
para redirecionar ambos STDOUT e STDERR de uma só vez enquanto o Bourne shell usa dois redirecionamentos para fazer isso, primeiro enviando STDOUT para o arquivo e enviando STDERR para o local STDOUT.
Note que, a discussão acima é verdadeira para todos os shell C e uma família de shells shell Bourne para portabilidade. Mas hoje em dia muitas coisas mudaram e esses tipos de coisas são modificados por causa da eficiência em implementações mais recentes de vários shells, por exemplo, em bash
(ou zsh
/ ksh
) que herdou do shell Bourne, você pode faça o acima com &>
:
./configure &> config.out &
Como você pode ver, na verdade é o contrário da sintaxe csh
, >&
.