Existují některé příkazy, které filtrují nebo působí na vstup a pak jej předávají jako výstup, myslím, že obvykle do stdout
– ale některé příkazy převezmou pouze stdin
a dělají s tím, co dělají, a nevydávají nic.
Nejvíc znám OS X, a tak mě hned napadnou dva, pbcopy
a pbpaste
– což jsou prostředky pro přístup do systémové schránky.
Každopádně vím, že pokud chci vzít stdout a vyplivnout výstup, půjdu do obou stdout
a soubor, pak mohu použít tee
příkaz. A o xargs
něco málo vím , ale nemyslím si, že to je to, co hledám.
Chci vědět, jak mohu rozdělit stdout
pro přechod mezi dvěma (nebo více) příkazy. Například:
cat file.txt | stdout-split -c1 pbcopy -c2 grep -i errors
Pravděpodobně existuje lepší příklad než tento, ale opravdu mě zajímá, jak mohu odeslat stdout příkazu, který jej nepřenáší, a přitom zachovat stdout
před „utlumením“ – neptám se na to, jak cat
soubor a grep
její část a zkopírujte ji do schránky – konkrétní příkazy nejsou tak důležité.
Také – neptám se, jak to poslat do souboru a stdout
– může to být „duplicitní“ otázka (omlouvám se), ale trochu jsem hledal a našel jsem pouze podobné, které se ptají na to, jak rozdělit mezi stdout a soubor – a odpovědi na tyto otázky se zdály být tee
, což si myslím, že pro mě nebude fungovat.
Nakonec se můžete zeptat:„Proč prostě neudělat pbcopy jako poslední věc v řetězci?“ a moje odpověď je 1) co když to chci používat a stále vidím výstup v konzole? 2) co když chci použít dva příkazy, které nemají výstup stdout
poté, co zpracují vstup?
Jo a ještě jedna věc – uvědomil jsem si, že bych mohl použít tee
a pojmenovaný kanál (mkfifo
), ale doufal jsem ve způsob, jak to lze provést inline, stručně, bez předchozího nastavení 🙂
Přijatá odpověď:
Můžete použít tee
a zpracujte nahrazení tohoto:
cat file.txt | tee >(pbcopy) | grep errors
To odešle veškerý výstup cat file.txt
na pbcopy
a získáte pouze výsledek grep
na vaší konzoli.
Do tee
můžete vložit více procesů část:
cat file.txt | tee >(pbcopy) >(do_stuff) >(do_more_stuff) | grep errors