Kuidas käivitada käsk väljundita taustal, kui pole viga?
Kui te olete hõivatud inimene, siis on viimane asi, mida vajate, et teda häiriks tohutu hulk "kasutuid" teateid, nii et kuidas te asju maha vaigistate? Tänapäeva SuperUser Q&A postitusel on mõned suurepärased vastused, mis aitavad lugejal väljundi summat vähendada.
Tänane küsimuste ja vastuste seanss saabub meiega kohtades, kus on SuperUser-Stack Exchange'i alajaotis, kogukondlikult juhitav Q&A veebisaitide rühmitus.
Küsimus
SuperUser lugeja Xster tahab teada, kuidas käsku taustal ilma väljundita käivitada, kui pole viga:
Kuidas tõrjuda käsu väljundit, kuid näidake seda, kui käsu väljumiskoodid on viga?
Kuidas saada käsk, mis võimaldab taustal ilma väljundita töötada, kui ei ole viga?
Vastus
SuperUser'i toetajad Bob ja Maximillian Laumeister on meile vastuseks. Esiteks, Bob:
Kahjuks eeldus, et stderr seda kasutatakse ainult veaväljundi puhul, ei ole alati õige. Pigem, stderr kasutatakse sageli mis tahes interaktiivse väljundi ja diagnostika jaoks (s.t väljund, mis on mõeldud kasutaja jaoks interaktiivses reas lugemiseks).(1) wget ja dd on hästi tuntud näited.
Mõned käsud annavad lipu (st. -vaikne või -vaikne) mitte-vea väljundi vähendamiseks. Lugege nende meeslehti, et näha, kas see on olemas.
Teine konventsioon, mis sagedamini toimib, on väljumiskood, Programm tagastab väljumiskoodi, kui see väljub. Tavaliselt(2), väljumiskood 0 näitab edu ja mis tahes muu väljumiskood näitab viga.
Koos bash, saate viimase käsu väljumiskoodi $? muutuja. Sisse kala, kasuta $ staatus muutuja. Võite toruda stderr ajutisele failile ja printige ainult siis, kui tekib viga. Näiteks (kala):
Võite kasutada ka mõningaid otseteid, kui te ei ahela käske:
Või:
Võite ka toru stdout kasutades sama puhvrit 2> & 1> / tmp / väljundpuhver.
(Märge: Ma tegelikult ei tea kala, nii et ma kohandan kontseptsiooni sellele, mida leian oma dokumentatsioonis. Süntaks võib olla veidi vale. Samuti saate kasutada mktemp unikaalse ajutise faili genereerimiseks. Käivitage see ja salvestage faili nimi muutuja.)
Kui teil on vaja käitada kogu asi kesta taustal, mida samal ajal ka interaktiivselt kasutate, siis on parem kirjutada skripti, et käsitseda selle skripti väljundi peitmine ja töötamine tavapäraste tehnikatega (kala). Heck, saate sisse panna midagi sellist funktsiooni ~ / .config / fish / config.fish:
Helista mõnevõrra vaikne ja vaikne (kus trail & põhjustab selle taustal töötamise)
Pange tähele, et see neelab originaalse väljumiskoodi ja tühistab mõlemad stdout ja stderr rikke korral. Saate seda vajadusel kohandada.
(1) Ei ole mingit garantiid, et veatoodet ei kuvata stdout, mõned programmid tühjendavad seal kõik väljundid!
(2) Kahjuks pole see alati nii. Programm kontrollib täielikult väljumiskoodi ja mõned näitavad mõningaid edutingimusi koos nullist väljapääsudega. Jällegi kontrollige kasutusjuhendit.
Järgneb Maximillian Laumeisteri vastus:
Unixi utiliidid saadavad üldisi sõnumeid stdout, ja veateated stderr, nii et kui me tahame näha ainult veateateid, siis piisab sellest pärssimiseks stdout nii et ainult stderr saab väljundi konsooli.
Kuidas seda teha (mõlemas bash ja kala) on lisatud > / dev / null käsule. Need torud stdout mitte midagi, vaid stderr (teie veateadetega) jõuab ikka veel konsooli.
Nii näiteks:
Käsk echo 1> / dev / null prindib midagi, sest tavaline stdout väljund on maha surutud ja midagi ei kirjutatud stderr.
Käsk mees doesnotexist> / dev / null prindib veateate, sest mees kirjutab oma veateate stderr.
Kas teil on midagi lisada selgitusele? Heli on kommentaarides välja lülitatud. Kas soovite lugeda rohkem vastuseid teistelt tech-savvy Stack Exchange'i kasutajatelt? Vaadake siin täielikku arutelu lõiku.