Это поведение было определено POSIX здесь :
Если в команде указано более одного оператора перенаправления, порядок оценки - от начала до конца.
и здесь :
«Простая команда» - это последовательность необязательных назначений переменных и перенаправлений в любой последовательности, необязательно сопровождаемых словами и перенаправлениями , завершается оператором управления.
Это уже имело место в Bourne shell , которую POSIX использовал в качестве основы.
Перед выполнением команды ее ввод и вывод могут быть перенаправлены с использованием специальной записи, интерпретируемой оболочкой . Следующее может появиться где угодно в простой команде - или может предшествовать или следовать за командой и не передается в вызванную команду. (…)
В отличие от исходной оболочки Bourne, POSIX не позволяет перенаправлению предшествовать сложной команде, такой как , в то время как… done
, (…)
и т. Д.
A обратите внимание, что порядок перенаправления важен, потому что он контролирует поведение вашей команды и предотвращает странный результат в случае сбоя. Пример:
command output
если команда
не смогла прочитать вход
(из-за разрешения, несуществующего ...), то она будет завершена без создания пустого файла output
, если вы поменяете местами перенаправления:
command >output