Программы обмениваются данными через потоки ввода-вывода. Стандартный вывод, сокращённо stdout, — это поток, который программа обычно использует для своих обычных результатов. В терминале оболочка изначально подключает этот поток к экрану терминала.
Text-Fu · Урок 1
stdout (стандартный вывод)
Узнайте, как стандартный вывод поступает в терминал и как Bash перенаправляет его в файлы.
Запись в стандартный вывод
Команда 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?
Чтобы попрактиковаться в перенаправлении стандартных потоков, выполните практическую лабораторную работу:
- Перенаправление ввода и вывода в Linux — потренируйтесь управлять потоками данных команд, перенаправляя стандартный вывод (stdout), стандартный поток ошибок (stderr) и стандартный ввод (stdin) с помощью операторов
>,>>,2>и командыtee.
Урок завершён
Вы завершили stdout (стандартный вывод)
Теперь вы можете перенаправлять стандартный вывод команды, не путая замену содержимого с добавлением.
Распознавайте stdout как поток обычных результатов команды.
Заменяйте содержимое файла с помощью
>.Сохраняйте существующее содержимое и добавляйте новое с помощью
>>.Проверяйте назначение до того, как оболочка откроет файл.
Сохраните прогресс
Создайте бесплатный аккаунт, чтобы сохранить этот урок и продолжить на любом устройстве.
Создать бесплатный аккаунт