Linux Labs

Первые шаги / Ступень 11 из 15

Куда уходит вывод команды

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 3 из 6 · теория · 4 мин

Дописать в конец

Повторный запуск с > оставляет в файле один последний вывод. Журнал, который копится от запуска к запуску, пишут иначе.

Перед запуском команды оболочка открывает файл, который стоит после >. Если файл есть, она стирает его содержимое, если нет — создаёт пустой. Только потом запускается команда. Поэтому прежний текст пропадает, даже когда команда упала, не напечатав ни строки.

>> открывает файл для дописывания: вывод встаёт в конец, прежние строки остаются. Если файла нет, >> создаст его, как и >. Так ведут журналы: каждый запуск добавляет строку.

bash
date >> checks.log    # строка с текущей датой — в конец checks.log
date >> checks.log    # вторая строка встанет под первой

С потоком ошибок так же: 2> перезаписывает файл, 2>> дописывает в него.

Проверь себя 1 вопрос

В notes.txt была строка first. Ты выполнил ls /no-such-dir > notes.txt, и ls напечатал ошибку. Что теперь в notes.txt?

  • Оболочка стёрла notes.txt до запуска ls, ещё до ошибки. cat notes.txt ничего не напечатает.

  • Сообщение ушло в поток 2, на экран: > перенаправил поток 1, а в него ls ничего не напечатал.

  • > стёр файл до запуска команды, так что first пропала; сообщение ушло в поток 2, на экран. Дописывает в конец >>.

Оболочка открыла notes.txt для > и стёрла его ещё до запуска ls. В поток 1 ls ничего не напечатал, а ошибку отправил в поток 2 — на экран. Поэтому cat notes.txt ничего не печатает.

Главное в шаге

  • > стирает файл ещё до запуска команды, >> дописывает вывод в конец.
  • Файл, который пополняется от запуска к запуску, ведут через >> и 2>>.
Ubuntu 24.04
Загрузка…