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