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
bash
reclamará 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.