Resumo
Em bash , se esse comando estiver em um script, o arquivo de script será substituído por uma mensagem de erro.
Exemplo
Considere o script:
$ cat test.sh
date 2&>$0
Agora, execute o script:
$ bash test.sh
test.sh: line 2: unexpected EOF while looking for matching '''
test.sh: line 3: syntax error: unexpected end of file
Observe o novo conteúdo do script:
$ cat test.sh
date: invalid date '2'
Explicação
O comando date 2&>$0 é interpretado da seguinte forma:
-
O comando
dateé executado com o argumento2 -
Toda saída, stdout e stderr, do comando date é redirecionada para o arquivo
$0.$0é o nome do script atual.O símbolo
>indica o redirecionamento de, por padrão, stdout. Como uma extensãobash, o símbolo&>é um redirecionamento de indicação de atalho de ambos stdout e stderr. Conseqüentemente, stdout e stderr são redirecionados para o arquivo$0. -
Quando o arquivo de script for sobrescrito, ele não será mais um script válido e
bashreclamará dos comandos malformados.
Diferença entre bash e shells POSIX
Com um shell POSIX simples, como dash , o atalho &> não é suportado. Portanto, o comando date 2&>$0 redirecionará o somente stdout para o arquivo $0 . Nesse caso, isso significa que o arquivo de script é sobrescrito com um arquivo vazio, enquanto a mensagem de erro date aparecerá no terminal.