19Aug

Kā jūs palaižat komandu fonā bez izejas, ja vien nav kļūda?

click fraud protection

Ja esat aizņemts cilvēks, tad viss, kas jums nepieciešams, ir jāuztraucas ar milzīgu daudzumu "bezjēdzīgu" paziņojumu, tad kā jūs noskaņojat lietas?Šodienas SuperUser Q & amai ir dažas lieliskas atbildes, lai palīdzētu lasītājam samazināt produkcijas apjomu.

Šodienas jautājums &Atbildes sesija mums priecājas par SuperUser - Stack Exchange, kas ir kopienas un Q & A tīmekļa vietņu grupa.

Jautājums

SuperUser lasītājs Xster vēlas uzzināt, kā palaist komandu fonā bez izvades, ja vien nav kļūda:

Kā jūs nomācat komandas izvadi, bet parāda, vai komandas izeja kodē kļūdu?

Kā jūs saņemat komandu darbināt fonā bez izejas, ja vien nav kļūda?

Atbildes

SuperUser autori Bobs un Maximillian Laumeister ir atbildīgi par mums. Pirmkārt, Bobs:

Diemžēl pieņēmums, ka stderr tiek izmantots tikai kļūdu izvadīšanai, ne vienmēr ir pareizs. Drīzāk stderr bieži lieto jebkurai un jebkurai interaktīvai produkcijai un diagnostikai( t.i., produkcijai, kas lietotājam paredzēta lasīšanai interaktīvā uzvednē).( 1) wget un dd ir labi pazīstami piemēri.

instagram viewer

Dažas komandas nodrošina karodziņu( t.i., -tēmu vai -silent ), lai apturētu bez kļūdām izvadi. Izlasiet viņu vīriešu lapas, lai redzētu, vai tā pastāv.

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

Ar bash jūs varat iegūt pēdējās komandas izejas kodu no $? mainīgais. zivīs izmantojiet $ statusa mainīgo. stderr varat pagaidīt uz pagaidu failu un izdrukāt tikai tad, ja rodas kļūda. Piemēram,( zivis ):

Jūs varat arī izmantot dažus saīsnes, ja neesat ķēdes komandu:

vai:

Jūs varat arī iespraust stdout uz to pašu buferi, izmantojot 2 & gt; 1 & gt;/tmp/ izvades buferis .

( Piezīme: Es faktiski nezināju zivju , tāpēc es pielāgoju koncepciju tam, ko es varu atrast dokumentācijā.Sinteksts var būt nedaudz nepareizi. Varat arī izmantot mktemp , lai radītu unikālu pagaidufails. Palaidiet to un ierakstiet faila nosaukumu mainīgā.)

Ja jums jāpārvieto visa lieta čaulas fonā, kuru jūs vienlaicīgi izmantojat arī interaktīvā veidā, tad jums ir labāk rakstīt skriptu, kas jārīkojasizejas slēpšanās un skriptu palaišana fonā ar standarta paņēmieniem( zivis ).Heck, /.config/fish/ config.fish :

var izsaukt šādu funkciju: zvanu ar palaistu klusu somecommand &( ja aizmugures un liek tai darboties fonā)

Ņemiet vērā, ka tas nolaiks sākotnējo izejas kodu un atteiksies gan stdout , gan stderr , ja notiks neveiksme. Varat to pielāgot, ja nepieciešams.

( 1) Nav garantijas, ka kļūdas iznākums neparādīsies stdout , dažas programmas visās produkcijās notiks.

( 2) Diemžēl tas vēl ne vienmēr ir. Programmu pilnībā pārrauga izejas kodu, un daži norāda veiksmes nosacījumus ar nulles izejām. Atkal pārbaudiet rokasgrāmatu.

Pēc Maximillian Laumeister atbildes:

Unix komunālie pakalpojumi sūta vispārīgus ziņojumus uz stdout un kļūdas ziņojumus stderr , tādēļ, ja mēs vēlamies redzēt tikai kļūdas ziņojumus, tad pietiek ar stdout apturēšanu, laitikai stderr izlaida konsoli.

Kā to izdarīt( gan bash , gan zivis ) ir pievienot & gt;/dev/ null uz komandu.Šīs caurules stdout neveidojas, bet stderr ( ar jūsu kļūdas ziņojumiem) joprojām tiek rādīts konsolei.

Piemēram:

Komandu echo 1 & gt;/dev/ null neko nedrukā, jo parastā standarta izeja ir nomākta, un nekas netika rakstīts stderr .

komanda man doesnotexist & gt;/dev/ null izdrukā kļūdas ziņojumu, jo vīrietis raksta kļūdas ziņojumu stderr .

Vai kaut kas jāpievieno paskaidrojumam? Skatieties komentāros. Vēlaties lasīt citas atbildes no citiem tehnoloģiju savvy Stack Exchange lietotājiem?Šeit skatiet pilnu diskusiju pavedienu.