Пример кота Linux

1343
studiohack

Не могли бы вы объяснить, почему: «cat <file.txt> file.txt» делает file.txt пустым?

3
Просто добавьте два нижних ответа: если вы хотите сделать цикл (бесконечно заполняя `file`), вы можете набрать` cat > file.txt` как две >> означает добавление вместо удаления файла. GregC 14 лет назад 0
Хлоп. Это просто страшно. Я никогда даже не думал об использовании (злоупотреблении?) Кошкой и трубками! Вот почему у нас есть команда «touch». ;-) Делает для классного примера, хотя. Brian Knoblauch 14 лет назад 0

2 ответа на вопрос

16
Michael Krelin - hacker

Поскольку он открывает и усекает файл перед чтением данных - это оболочка, перенаправления обрабатываются оболочкой еще до запуска cat.

13
Gregory Pakosz

>Перенаправление происходит первым и открывает file.txtдля записи, который очищает любой существующий контент.

Этот ответ несколько вводит в заблуждение - @ хакер более точен. На моих системах перенаправления обрабатываются в порядке спецификации. То есть `<` происходит сначала, а затем `>`, но последнее открывается не просто «для записи», а * с усечением * (`O_TRUNC`), то есть то, что« очищает существующее содержимое ». @hacker прав, это происходит еще до того, как `cat (1)` будет выполнена. pilcrow 14 лет назад 0

Похожие вопросы