Mājas lapa » » Kā jūs vadāt komandu fonā ar izeju, ja vien nav kļūdas?

    Kā jūs vadāt komandu fonā ar izeju, ja vien nav kļūdas?

    Ja esat aizņemts cilvēks, tad pēdējais, kas jums nepieciešams, ir bothered ar milzīgu "bezjēdzīgu" paziņojumu skaitu, tāpēc kā jūs klusināt lietas? Šodienas SuperUser Q&A ziņojumam ir dažas lieliskas atbildes, lai palīdzētu lasītājam nomierināt produkcijas apjomu.

    Šodienas jautājumu un atbilžu sesija mums dod pieklājību no SuperUser-Stack Exchange apakšnodaļas, kas ir kopienas orientēta Q & A tīmekļa vietņu grupa.

    Jautājums

    SuperUser lasītājs Xster vēlas zināt, kā palaist komandu fonā bez izejas, ja vien nav kļūdas:

    Kā nomākt komandas izvadi, bet parādiet to, ja komandas izejas kodi ir kļūda?

    Kā jūs saņemsiet komandu, lai darbotos fonā bez izejas, ja vien nav kļūdas?

    Atbilde

    SuperUser dalībniekiem Bob un Maximillian Laumeister ir atbilde. Vispirms, Bob:

    Diemžēl pieņēmums, ka stderr tiek izmantota tikai kļūdas izvadīšanai ne vienmēr ir pareiza. Drīzāk, stderr bieži izmanto jebkurai interaktīvai izejai un diagnostikai (t.i., izeja, kas paredzēta lietotājam, lai lasītu interaktīvā uzvednē).(1) wget un dd ir labi zināmi piemēri.

    Dažas komandas nodrošinās karogu (t.i.. -kluss vai -kluss), lai apturētu bez kļūdas izvadi. Izlasiet to cilvēka lapas, lai redzētu, vai tāda ir.

    Vēl viena konvencija, kas biežāk notiek, ir izejas kods, programma iziet izejas kodu, kad tā iziet. Parasti(2), izejas kods 0 norāda uz panākumiem, un jebkurš cits izejas kods norāda uz kļūdu.

    Ar bash, jūs varat saņemt pēdējās komandas izejas kodu no $? mainīgais. In zivis, izmantot $ statuss mainīgais. Jūs varat caurulīt stderr uz pagaidu failu un izdrukājiet to tikai tad, ja rodas kļūda. Piemēram (zivis):

    Varat arī izmantot dažus īsceļus, ja neesat sasaistījis komandas:

    Vai:

    Jūs varat arī cauruli stdout izmantojot to pašu buferi 2> & 1> / tmp / izvades buferis.

    (Piezīme: Es patiesībā nezinu zivis, tāpēc es pielāgoju koncepciju tam, ko es varu atrast tās dokumentācijā. Sintakse var būt nedaudz nepareiza. Varat arī izmantot mktemp lai izveidotu unikālu pagaidu failu. Palaidiet to un ierakstiet faila nosaukumu mainīgajā.)

    Ja jums ir nepieciešams palaist visu lieta apvalka fonā, kuru vienlaikus izmantojat arī interaktīvi, tad jums ir labāk rakstīt skriptu, lai apstrādātu izejas slēpšanu un skriptu darbinātu fonā ar standarta metodēm (zivis). Heck, jūs varat ievietot kaut ko līdzīgu šādai funkcijai ~ / .config / fish / config.fish:

    Zvaniet ar kluss un kluss (kur ir trailing & izraisa to darboties fonā)

    Ņemiet vērā, ka tas būs norīt sākotnējo izejas kodu un izgāzt abus stdout un stderr neveiksmes gadījumā. Jūs to varat pielāgot pēc vajadzības.

    (1) Nav garantijas, ka kļūdas izeja netiks parādīta stdout, dažas programmas tiks izgāztas visas izejas!

    (2) Diemžēl tas ne vienmēr notiek. Programma pilnībā kontrolē izejas kodu, un daži norādīs dažus panākumu nosacījumus, kad iziet no nulles. Vēlreiz pārbaudiet rokasgrāmatu.

    Seko atbilde no Maximillian Laumeister:

    Unix komunālie pakalpojumi nosūta vispārīgus ziņojumus stdout, un kļūdas ziņojumus stderr, tāpēc, ja mēs tikai vēlamies redzēt kļūdas ziņojumus, tad tas būs pietiekami, lai apspiestu stdout tā, ka tikai stderr tiek izvadīts uz konsoli.

    Veids, kā to izdarīt (abos bash un zivis) ir jāpievieno > / dev / null komandai. Šīs caurules stdout neko, bet stderr (ar jūsu kļūdas ziņojumiem) joprojām tiek parādīts konsolē.

    Tā, piemēram:

    Komanda echo 1> / dev / null drukā neko, jo normāls stdout izvade tiek nomākta, un nekas netika rakstīts stderr.

    Komanda cilvēks doesnotexist> / dev / null izdrukā kļūdas ziņojumu, jo cilvēks raksta kļūdas ziņojumu stderr.


    Vai kaut kas jāpievieno paskaidrojumam? Skaņas izslēgšana komentāros. Vai vēlaties lasīt vairāk atbildes no citiem tehnoloģiju gudriem Stack Exchange lietotājiem? Apskatiet pilnu diskusiju pavedienu šeit.