Выбор ответа Middle Потоки и пайпы обновлено

sort f > f

Вопрос

Что станет с файлом names.txt после sort names.txt > names.txt?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Станет пустым: shell обнуляет файл до запуска sort. Перенаправление открывает файл с усечением до старта sort, и sort читает уже пустой файл.

Варианты ответа

  1. Отсортируется на месте: sort сначала читает файл целиком
  2. Shell откажется выполнять команду с одним файлом на вход и выход
  3. Строки задвоятся: вывод допишется к исходному содержимому
  4. Станет пустым: shell обнуляет файл до запуска sortправильный ответ

Разбор

Перенаправление > открывает файл с усечением до старта sort, и sort читает уже пустой файл. Для сортировки на месте у sort есть -o names.txt (он читает всё до записи), в общем случае помогает sponge из moreutils или временный файл. Bash сам не защищает от этого, если не включён noclobber, а тот защищает только от перезаписи существующего файла.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме