stdout (стандартный вывод)
100%

Text-Fu · Урок 1

stdout (стандартный вывод)

Узнайте, как стандартный вывод поступает в терминал и как Bash перенаправляет его в файлы.

Программы обмениваются данными через потоки ввода-вывода. Стандартный вывод, сокращённо stdout, — это поток, который программа обычно использует для своих обычных результатов. В терминале оболочка изначально подключает этот поток к экрану терминала.

Запись в стандартный вывод

Команда echo записывает свои аргументы в stdout:

$ echo Hello World
Hello World

Stdout соответствует файловому дескриптору 1; это число пригодится при перенаправлении нескольких потоков. У программ также могут быть стандартный ввод, или stdin, и стандартный поток ошибок, или stderr. Они рассматриваются в следующих уроках.

Куда echo Hello World обычно отправляет свой обычный вывод в интерактивном терминале без перенаправления?

Замена содержимого файла с помощью >

Bash интерпретирует > как оператор перенаправления вывода. Он открывает файл назначения и подключает к нему stdout команды:

$ echo Hello World > peanuts.txt

Текст больше не появляется в терминале, потому что stdout направлен в peanuts.txt. Если файла нет, оболочка создаёт его. Если он существует, оболочка усекает его до начала записи команды, поэтому прежнее содержимое теряется.

Проверьте результат с помощью cat:

$ cat peanuts.txt
Hello World

В notes.txt уже есть текст. Что сделает echo new > notes.txt?

Поскольку оболочка открывает файл назначения до запуска команды, проверяйте путь перед нажатием Enter. Из-за опечатки или случайно выбранный существующий файл может быть усечён, даже если затем команда завершится с ошибкой.

Добавление в файл с помощью >>

Используйте >>, когда новый stdout нужно добавить после существующего содержимого файла:

$ echo Another line >> peanuts.txt
$ cat peanuts.txt
Hello World
Another line

Как и >, оператор >> создаёт отсутствующий файл назначения. Различие состоит в способе открытия существующего файла: >> добавляет данные, а не усекает его.

Какая команда добавляет Finished в конец status.log, не стирая существующее содержимое?

Перенаправление выполняет оболочка

Оболочка распознаёт > и >>, удаляет эти операторы из аргументов, передаваемых программе, открывает файл и настраивает соединение потока. Сама команда просто записывает в stdout как обычно.

Поэтому один и тот же синтаксис перенаправления работает со многими командами:

$ pwd > current-directory.txt
$ ls -la >> directory-list.txt

Кто обычно интерпретирует > в pwd > current-directory.txt?

Чтобы попрактиковаться в перенаправлении стандартных потоков, выполните практическую лабораторную работу:

  1. Перенаправление ввода и вывода в Linux — потренируйтесь управлять потоками данных команд, перенаправляя стандартный вывод (stdout), стандартный поток ошибок (stderr) и стандартный ввод (stdin) с помощью операторов >, >>, 2> и команды tee.

Урок завершён

Вы завершили stdout (стандартный вывод)

Теперь вы можете перенаправлять стандартный вывод команды, не путая замену содержимого с добавлением.

  • Распознавайте stdout как поток обычных результатов команды.

  • Заменяйте содержимое файла с помощью >.

  • Сохраняйте существующее содержимое и добавляйте новое с помощью >>.

  • Проверяйте назначение до того, как оболочка откроет файл.

Сохраните прогресс

Создайте бесплатный аккаунт, чтобы сохранить этот урок и продолжить на любом устройстве.

Создать бесплатный аккаунт
Следующий Урок
Назад к Text-Fu