EMZETT.
Войти

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