Не могли бы вы объяснить, почему: «cat <file.txt> file.txt» делает file.txt пустым?
Пример кота Linux
2 ответа
Поскольку он открывает и усекает файл перед чтением данных - это оболочка, перенаправления обрабатываются оболочкой еще до запуска cat.
>Перенаправление происходит первым и открывает file.txtдля записи, который очищает любой существующий контент.
Этот ответ несколько вводит в заблуждение - @ хакер более точен. На моих системах перенаправления обрабатываются в порядке спецификации. То есть < происходит сначала, а затем >, но последнее открывается не просто «для записи», а * с усечением * (O_TRUNC), то есть то, что« очищает существующее содержимое ». @hacker прав, это происходит еще до того, как cat (1) будет выполнена.