GNU/Linux >> Znalost Linux >  >> Linux

Jak funguje Tee Command?

Zavřeno . Tato otázka vyžaduje podrobnosti nebo jasnost. Momentálně nepřijímá odpovědi.

Chcete zlepšit tuto otázku? Přidejte podrobnosti a objasněte problém úpravou tohoto příspěvku.

Zavřeno před 4 lety.


Vylepšete tuto otázku

Poté, co jsem narazil na asi 3 tee vysvětlení, která považuji za nedidaktická, požádal bych o jednoduché, obecné a stupňovité (pokud možno) vysvětlení tohoto příkazu, určeného pro nováčky v Linuxu.

Chápu, že jej používáme buď prostřednictvím kanálu, na stdout příkazu, nebo alternativně přímo k určitému souboru, ale myslím, že mi uniká, co vlastně příkaz s tímto obsahem dělá a kdy je užitečný.

Takže tady je to, na co se ptám v naději, že najdu didaktické vysvětlení, podané nováčkům jasným a stupňovitým způsobem:

  1. Jak příkaz funguje buď se stdout příkazu, nebo případně se soubory samotnými?

  2. Proč je běžné říkat tee čte standardní vstup? Myslím, když udělám ls -l , tee nečte syntaxi ls -l sám, ale spíše stdout, který vytiskl do relace.

Pokud chcete, podělte se také o praktický příklad z vaší každodenní práce, kdy tee je pro vás velmi užitečný?

Přijatá odpověď:

Z tee manuál v mém systému:

Obslužný program tee zkopíruje standardní vstup na standardní výstup a vytvoří kopii
v žádném nebo více souborech. Výstup je bez vyrovnávací paměti.

Čte tedy ze standardního vstupu a kopíruje jej na standardní výstup a přitom také duplikuje stream do jednoho nebo několika souborů.

V následujícím kanálu tee vezme výstup prvního příkazu v potrubí a zkopíruje ho na standardní výstup (terminál) a zároveň vytvoří jeho kopie v souborech one , two a three :

$ somecommand | tee one two three

tee má mnoho použití, jedno je ve spojení s sudo k přesměrování výstupu do souboru vlastněného uživatelem root:

$ somecommand | sudo tee /root/somefile >/dev/null

Následující by nebylo fungovaly, protože k přesměrování dojde jako neprivilegovaný uživatel (také by spustil somecommand jako root, který může být nežádoucí):

$ sudo somecommand >/root/somefile

Umělý příklad připojení pevné sady řádků k mnoha souborům najednou (všem uživatelům ~/.profile soubory, za předpokladu, že * expanduje na uživatelská jména a že rozbalený příkazový řádek nebude příliš dlouhý na to, aby jej shell zvládl):

$ tee -a /home/*/.profile <<'END_NEWPATH'
PATH="$PATH:/opt/bin"
END_NEWPATH

Skutečný příklad použití tee :

time doas box-build.sh 2>&1 | tee build.out |  grep '^=*>'

Toto jsem já, když budují základní systém OpenBSD. doas je OpenBSD „ekvivalent“ sudo a box-build.sh je malý shell skript, který provádí stavbu (v podstatě cd /usr/src && make obj && make build ). Rád bych si uložil výstup celého procesu sestavování, včetně případných chyb nebo varování, ale nechci, aby všechno chrlilo ven do mého terminálu. K tomuto účelu používám tee vše uložit do build.out a poté grep získat pouze náznak toho, kde se v tomto procesu v terminálu nacházíme.

Související:Skript Shell s funkcí a parametrem jako proměnné?
Linux
  1. Jak funguje příkaz oc debug v OpenShift

  2. Jak příkaz Sed ‚1!g;h;$!d‘ obrátí obsah souboru?

  3. Jak funguje příkaz ps?

  1. Jak používat Linuxový příkaz grep

  2. Jak používat příkaz historie v Linuxu

  3. Jak používat příkaz basename?

  1. Jak Sticky Bit funguje?

  2. Jak funguje příkaz Exit na Unixovém terminálu?

  3. Jak je zástupný znak * interpretován jako příkaz?