Два вывода программы
В терминале: zvezda learn streams. Урок покажет карточку и завершится; сделайте шаг и снова запустите урок - он проверит и покажет следующую.
Шаг 1 из 4
Дарья: Я долго не понимала, откуда у программы «два вывода». Кэндзи объяснил: 1 - обычный вывод (stdout), 2 - ошибки и служебное (stderr). На экране они смешиваются. Запустите:
zv-noisy
Где-то в шуме мелькнёт слово - его легко пропустить. Спрячьте обычный вывод (поток 1):
zv-noisy > /dev/nullШаг 2 из 4
Дарья: Теперь сохраните только поток 2 в файл - для этого 2>:
zv-noisy 2> ~/zvezda/learn/err.txt
cat ~/zvezda/learn/err.txt
Шум при этом останется на экране: он идёт в поток 1.
Шаг 3 из 4 (продолжение)
Дарья: Основа пройдена - хватит для задания 18. Дальше - для задания 19: оба потока в один файл. Кэндзи записал: «2>&1 - это поток 2 туда же, куда СЕЙЧАС направлен поток 1», поэтому порядок важен:
zv-noisy > ~/zvezda/learn/all.txt 2>&1
Наоборот (2>&1 > all.txt) не сработает - я сама так ошиблась.
Шаг 4 из 4 (продолжение)
Дарья: И tee - сразу и на экран, и в файл. Конвейер | передаёт только поток 1, поэтому 2>&1 ставят перед |:
zv-noisy 2>&1 | tee ~/zvezda/learn/tee.txtШпаргалка
> файл - поток 1 (обычный вывод) в файл 2> файл - поток 2 (ошибки, служебное) в файл > /dev/null - выбросить поток 1, на экране останется поток 2 > файл 2>&1 - оба потока в файл (порядок важен!) 2>&1 | tee файл - оба потока и на экран, и в файл