Ako ste zaposlena osoba, posljednja stvar koju trebate je biti gnjaviti s ogromnom količinom 'beskorisnih' obavijesti, pa kako ćete tihi stvari dolje? Danas SuperUser Q & A post ima neke odlične odgovore kako bi pomogao čitatelju da utišava količinu izlaza.
Današnja pitanja i odgovori nam se javljaju zahvaljujući SuperUseru - podjele Stack Exchange-a, zajednice-driven grupiranja Q & A web stranica.
SuperUser čitač Xster želi znati kako pokrenuti naredbu u pozadini bez izlaza osim ako postoji pogreška:
Kako možete potisnuti izlaz naredbe, ali pokazati je li izlazni kod naredbe pogreška?
Kako dobivate naredbu za pokretanje u pozadini bez izlaza, osim ako postoji pogreška?
Bobu i Maximillianu Laumeisteru, koji su sudjelovali u SuperUseru, imaju odgovor za nas. Prvo, Bob:
Nažalost, pretpostavka da stderr se koristi samo za izlaz pogreške nije uvijek točan. umjesto toga, stderr često se koristi za sve interaktivne izlaze i dijagnostiku (tj. izlaz namijenjen korisniku za čitanje u interaktivnom promptu).(1) wget i dd poznati su primjeri.
Neke naredbe će dati zastavicu (tj. -miran ili -silent) kako bi se suzbio izlaz bez pogreške. Pročitajte njihove stranice s muškarcima kako biste vidjeli postoji li neki.
Druga konvencija koja češće posjeduje je izlazni kôd, program vraća izlazni kôd kada izađe. Tipično(2), izlazni kod od 0 označava uspjeh, a svaki drugi izlazni kôd označava pogrešku.
S udariti, možete dobiti izlazni kôd zadnje naredbe iz $? promjenjiva. U riba, koristiti status $ promjenjiva. Možete cijev stderr na privremenu datoteku i ispisati je samo ako se pojavi pogreška. Na primjer (riba):
Također možete upotrijebiti neke prečace ako niste komandirane naredbe:
Ili:
Također možete cijev stdout na isti spremnik pomoću 2> & 1> / tmp / izlazni pufer.
(Bilješka: Zapravo ne znam riba, pa prilagodim koncept onome što mogu pronaći u svojoj dokumentaciji. Sintaksa može biti malo pogrešna. Također, možete koristiti mktemp za generiranje jedinstvene privremene datoteke. Pokrenite ga i zabilježite naziv datoteke u varijabli.)
Ako trebate pokrenuti cijelu stvar u pozadini ljuske koju također koristite interaktivno u isto vrijeme, onda ste bolje pisati skriptu za obradu izlaz-skrivanje i pokretanje skripte u pozadini standardnim tehnikama (riba). Pakao, možete staviti nešto slično sljedećoj funkciji ~ / .Config / ribe / config.fish:
Nazovite s run-tihi somecommand & (gdje prate & uzrokuje pokretanje u pozadini)
Imajte na umu da će to progutati izvorni izlazni kôd i izbrisat će oboje stdout i stderr u slučaju neuspjeha. Možete ga prilagoditi prema potrebi.
(1) Nema jamstva da se pogreška neće prikazati stdout, neki će programi izbrisati sve izlazne datoteke!
(2) Nažalost, to još uvijek nije uvijek slučaj. Izlazni kôd u potpunosti je kontroliran programom, a neki će pokazati neke uvjete uspjeha s izlazima koji nisu nuli. Ponovno provjerite priručnik.
Slijedi odgovor Maximillian Laumeister:
Unix komunalije šalju opće poruke stdout, i poruke o pogrešci u stderr, pa ako samo želimo vidjeti poruke o pogrešci, tada će biti dovoljno za suzbijanje stdout tako da samo stderr dobiva izlaz na konzolu.
Način da to učinite (u oba slučaja udariti i riba) je dodati > / Dev / null na naredbu. Ovo cijevi stdout u ništa, ali stderr (s vašim porukama o pogrešci) još uvijek dolazi do konzole.
Tako npr.
Naredba echo 1> / dev / null ne ispisuje ništa, jer normalno stdout izlaz je potisnut, a ništa nije napisano stderr.
Naredba čovjek doesnotexist> / dev / null ispisuje poruku o pogrešci jer čovjek piše poruku o pogrešci stderr.
Imate li nešto za objašnjenje? Zvuči u komentarima. Želite li pročitati više odgovora od drugih tehnoloških korisnika Stack Exchangea? Pogledajte ovdje cijelu raspravu.