Сегодня я изучаю команду сортировки.

Я нахожу это, я могу использовать

sort file1 > file2

Чтобы вставить отсортированный файл в file2

Но когда я использую

sort file1 > file1

file1 становится пустым!

Зачем?!

Я знаю, что могу использовать флаг -o, чтобы получить сортировку file1 в file1.

Но почему вторая команда выдает пустой файл?

2 ответа2

7

Перенаправление вывода оболочкой очищает содержимое файла перед выполнением команды sort .

От man bash:

Перед выполнением команды ее ввод и вывод могут быть перенаправлены с использованием специальных обозначений, интерпретируемых оболочкой. [...]

Перенаправление вывода приводит к тому, что файл, имя которого является результатом раскрытия слова, открывается для записи [...]. Если файл не существует, он создается; если он существует, он усекается до нулевого размера.

0

Как Даниэль Бек объяснил, почему это не удается.

Вот способ сделать ту работу, которую хочет ОП.

sort file1 | tee file1

Это T-образный канал, который может записать буфер в файл и передать буфер в качестве вывода на следующий канал, здесь нам просто нужно использовать его половинную мощность.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .