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