Shell: каналы (pipe) и перенаправления
Коротко: В оболочке канал (|) соединяет вывод одной программы с вводом следующей, а перенаправления (>, <) направляют ввод и вывод в файлы. Из них из маленьких инструментов собирают мощные цепочки команд.
Подробнее: У каждой программы три стандартных канала: ввод (stdin, 0), вывод (stdout, 1) и вывод ошибок (stderr, 2). Оболочка может их перенаправлять.
Подробности
- Канал:
cat log.txt | grep ERROR | sort | uniq -c | sort -rn | headфильтрует, считает и ранжирует сообщения об ошибках. Программы работают одновременно. - Вывод в файл:
команда > файлперезаписывает,команда >> файлдописывает. - Ввод из файла:
команда < файл. - Разделение ошибок:
команда 2> errors.txt, оба вместекоманда > all.txt 2>&1или коротко&> all.txt(bash). Следите за порядком:2>&1копирует то, куда 1 указывает в данный момент. - Отбрасывание:
команда > /dev/null 2>&1. - Показать и сохранить одновременно:
команда | tee file.txt. - Подстановка команд:
$(команда)вставляет вывод одной команды в другую строку. - Here-строки и here-документы:
<<< "текст"и<<EOF ... EOFпередают текст как ввод. - Успех в каналах: По умолчанию учитывается лишь код возврата последней команды.
set -o pipefailсообщает и о более ранних сбоях.
См. также: написание shell-скриптов, Bash