Linux / Debian - Що робить "мочитися" у moreutils?


21

Нещодавно я відкрив пакет «moreutils» у Debian (та Ubuntu) . Це колекція зручних інструментів Unix.

Однією з команд є "пі". На сторінці чоловіка написано:

мочиться як трійник, але для труб.

Однак це коротка сторінка, я наклав помилку на тему . Хтось знає, що це робить, як ним користуватися, чому б хтось використовував?

Відповіді:


29

Ось що ви можете зробити з мочитися:

seq 5 -1 1 > file
cat file |pee 'sort -u > sorted' 'sort -R > unsorted'

Отже, pee працює з оболонковими трубами замість файлів.

bash не потребує мочитися, він може відкривати команди оболонки у вигляді файлів:

cat file |tee >(sort -u > sorted) >(sort -R > unsorted)

1
Чи буде це працювати з файлами-джокерами? Дивіться zgp.org/~dmarti/tips/git-multiple-post-receive-hooks - pee використовується для множення stdinта надання клонів кожному сценарію, що відповідає шаблону імені файлу, чи може чистий баш зробити це? AFAIU, це розширить зірочку всередині дужок, наприклад, tee >(app1 app2 app3 app4)що не >(app1) >(app2) >(app3) >(app4)те, що показує ваша відповідь
Arioch '

@Arioch, синтаксис bash не працюватиме з технікою гак-джокера. Просто встановіть більшеутилітів.
Тобу

1
Використовуйте tee >/dev/nullдля уникнення тиражування stdin на stdout
jfs

1
реальна перевага мочитися над трійником полягає в тому, що він надсилає stdout від кожного підпроцесу до самого stdout моменту. з трійником вам потрібно перенаправити кожен процес stdout у файл, якщо ви хочете його зберегти, але з pee вам просто потрібно зберегти stdout. Звичайно, це має сенс лише в тому випадку, якщо кожна підкоманда виводить аналогічний формат. наприклад, якби ви не змогли зрозуміти, як це зробити, або регулярні вирази в "grep", які ви могли б зробити cat file | pee 'grep this' 'grep that' > lines.with.this.or.that.txt... використовуючи tee, ви просто отримаєте копію fileна stdout.
недоріг

>(command)Функція називається Підстановка процесів .
Властиміл Овчачик

16

Це, мабуть, простіше зрозуміти, чи ти користувався teeпершим. Цей корисний старий інструмент приймає стандартне введення та записує у кілька файлів, а також стандартний вихід. Наступні:

echo "Hello world" | tee one two

Створиться два файли, названі oneта two, обидва містять рядок Hello world. Він також надрукує на ваш термінал.


Тепер peeвиконує аналогічну функцію, але замість перенаправлення виводу на кілька файлів він перенаправляє на кілька вторинних команд, ala pipe. Це трохи відрізняється від teeтого, що він не надсилає початковий stdin до stdout, оскільки не було б сенсу поєднувати його з результатами вторинних команд. Наступний дуже простий приклад:

echo "Hello world" | pee cat cat

Виведе рядок Hello worldна ваш термінал двічі. Це відбувається тому, що кожен з двох екземплярів catотримує стандартний вихід і робить те, що catробить, що є друком.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.