Jos olet kiireinen henkilö, niin viimeinen asia mitä tarvitset on häiritä valtava määrä "hyödytön" ilmoituksia, niin miten hiljaa asioita alas? Tänään SuperUser Q & A -postilla on hienoja vastauksia, joiden avulla lukija hiljentää tuotoksen määrää.
Tämän päivän kysymys- ja vastausistunto tulee meihin SuperUserin hyväksi - Stack Exchangein alaosasto, joka on yhteisöllinen Q & A-sivustojen ryhmittely.
SuperUser-lukija Xster haluaa tietää, miten komentojono taustalla ilman tuottoa, ellei ole virheitä:
Kuinka estät komennon lähdön, mutta näytä, jos komennon poistokoodit ovat virheitä?
Miten saat komennon toimimaan taustalla ilman tuottoa, ellei ole virheitä?
Bob & Maximillian Laumeisterin SuperUser-avustajilla on vastaus meille. Ensin ylös, Bob:
Valitettavasti oletus, että stderr käytetään vain virheen tuottamiseen ei aina ole oikein. pikemminkin stderr käytetään usein mihinkään ja kaikkiin vuorovaikutteisiin lähdöihin ja diagnostiikkaan (toisin sanoen käyttäjälle tarkoitetun lähdön lukemiseen interaktiivisessa kehotteessa).(1) wget ja dd ovat tunnettuja esimerkkejä.
Jotkin komennot antavat lippua (ts. -hiljainen tai -hiljainen), joka estää ei-virheen lähdön. Lue heidän man sivuillaan, onko olemassa.
Toinen yleissopimus, joka on useammin, on poistokoodi, ohjelma palauttaa poistumiskoodin, kun se poistuu. Tyypillisesti(2), poistumiskoodi 0 tarkoittaa menestystä, ja mikä tahansa muu poistumiskoodi osoittaa virheen.
Kanssa lyödä, voit saada viimeisen komennon poistokoodin $? muuttuja. Sisään kalastaa, Käytä $ tila muuttuja. Voit putkea stderr tilapäiseen tiedostoon ja tulosta vain, jos virhe ilmenee. Esimerkiksi (kalastaa):
Voit myös käyttää joitakin pikakuvakkeita, jos et ole ketjutuskomentoja:
Tai:
Voit myös putkea stdout samaan puskuriin käyttämällä 2> & 1> / tmp / ulostulopuskuri.
(Huomautus: En oikeastaan tiedä kalastaa, joten mukautan konseptia siihen, mitä löydän sen dokumentaatiosta. Syntaksi saattaa olla hieman väärä. Voit myös käyttää mktemp luoda ainutlaatuinen väliaikainen tiedosto. Suorita se ja tallenna tiedostonimi muuttujaan.)
Jos sinun tarvitsee käyttää koko asiaa kuoren taustalla, jota käytät myös vuorovaikutteisesti samanaikaisesti, sinun on parempi kirjoittaa komentosarja käsittelemään lähdön piilottamista ja suorittamaan komentosarja taustalla standardimenetelmillä (kalastaa). Heck, voit laittaa jotain seuraavaan funktioon ~ / .Config / kala / config.fish:
Soita run-hiljainen somecommand & (jossa takana & saa sen toimimaan taustalla)
Huomaa, että tämä nielaisee alkuperäisen poistumiskoodin ja tyhjentää molemmat stdout ja stderr epäonnistumisen tapahtuessa. Voit muokata sitä tarpeen mukaan.
(1) Ei ole takeita siitä, että virhetulostus ei tule näkyviin stdout, jotkut ohjelmat poistavat kaikki tuotokset siellä!
(2) Valitettavasti tämä ei ole aina aina mahdollista. Ohjelma ohjasi poistumiskoodin kokonaan, ja jotkut osoittavat menestysolosuhteita nollasta poikkeavilla poistumisilla. Tarkista myös käsikirja.
Sen jälkeen Maximillian Laumeisterin vastaus:
Unix-apuohjelmat lähettävät yleisiä viestejä stdout, ja virheilmoituksia kohteeseen stderr, joten jos haluamme vain nähdä virheilmoituksia, riittää tukahduttamaan stdout niin vain stderr saa tuotannon konsoliin.
Tapa niin (molemmissa lyödä ja kalastaa) on liitettävä > / Dev / null komennolle. Nämä putket stdout osaksi mitään, mutta stderr (virheilmoituksesi kanssa) siirtyy edelleen konsoliin.
Joten esimerkiksi:
Käsky echo 1> / dev / null ei tulosta mitään, koska normaali stdout tuotos tukahdutetaan, eikä mitään kirjoitettu stderr.
Käsky mies doesnotexist> / dev / null tulostaa virheilmoituksen, koska mies kirjoittaa virheilmoituksensa stderr.
Onko jokin asia lisättävä selitykseen? Kuulkaa kommentit. Haluatko lukea lisää vastauksia muilta tech-tajuilta Stack Exchange-käyttäjiltä? Katso koko keskusteluketju täältä.