Esse comportamento foi definido por POSIX aqui :
If more than one redirection operator is specified with a command, the order of evaluation is from beginning to end.
e aqui :
A "simple command" is a sequence of optional variable assignments and redirections, in any sequence, optionally followed by words and redirections, terminated by a control operator.
Este já era o caso do Bourne shell , que POSIX usou como base.
Before a command is executed its input and output may be redirected using a special notation interpreted by the shell. The following may appear anywhere in a simple- command or may precede or follow a command and are not passed on to the invoked command. (…)
Ao contrário do shell Bourne original, o POSIX não permite que o redirecionamento preceda um comando complexo como while … done
, ( … )
, etc.
Uma nota que a ordem de redirecionamento é importante, porque controla o comportamento do comando e impede que você obtenha algum resultado estranho em caso de falha. Exemplo:
command <input >output
se command
não leu input
(devido a permissão, inexistente ...) então será encerrado sem criar o arquivo vazio output
se você trocar a posição de redirecionamento:
command >output <input