LINUX.ORG.RU

Логика стандартного вывода в файл?

 


0

1

Создаю файл: $ cat > foo.txt

b

a

Затем выполняю:

$ cat foo.txt | sort > sort.txt

$ cat foo.txt | sort > foo.txt

Далее:

$ ls -l *

-rw-rw-r-- 1 totality totality 0 авг 13 11:18 foo.txt

-rw-rw-r-- 1 totality totality 4 авг 13 11:18 sort.txt

Почему в sort.txt записался отсортированный foo.txt, а при попытке записать отсортированный файл в сам себя он просто затирается (размер 0)?



Последнее исправление: artem-totality (всего исправлений: 2)

Потому что оболочка первым делом создает новый файл, куда будет направлен вывод, а потом делает все остальное.

Кстати, если почитать man sort, то можно узнать кое-что интересное.

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 1)
Ответ на: комментарий от artem-totality

Еще раз, про твой частный случай: это умеет сам sort. Без всяких там конвейеров и перенаправлений.

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 1)
Ответ на: комментарий от artem-totality

Благодарю, да sponge делает то что надо)

Не надо пытаться писать в тот же файл, из которого читаешь. sponge — коварная программа (вернее, не она сама, а каналы в шелле). Однажды ты ошибёшься, сделаешь какую-нить опечатку типа

$ cat fo.txt | sort | sponge foo.txt

и будешь рвать на себе одежды и посыпать голову пеплом.

debugger ★★★★★
()