da.phhsnews.com


da.phhsnews.com / Hvordan kører du et kommando i baggrunden uden output, medmindre der er en fejl?

Hvordan kører du et kommando i baggrunden uden output, medmindre der er en fejl?


Hvis du er en travl person, så er det sidste du har brug for at blive generet af et stort mængden af ​​"ubrugelige" anmeldelser, så hvordan stopper du tingene ned? Dagens SuperUser Q & A-indlæg har nogle gode svar, der hjælper en læser til at stoppe mængden af ​​output.

Dagens Spørgsmål og Svar session kommer til os med venlig hilsen af ​​SuperUser-en underafdeling af Stack Exchange, en community-driven gruppe af Q & A-websteder.

Spørgsmålet

SuperUser-læser Xster vil vide, hvordan man kører en kommando i baggrunden uden output, medmindre der er en fejl:

Hvordan undertrykker du en kommandos output, men viser det, hvis kommandos exitkoder en fejl?

Hvordan får du en kommando til at køre i baggrunden uden output, medmindre der er en fejl?

Svaret

SuperUser-bidragsydere Bob og Maximillian Laumeister har svaret for os. Først op, Bob:

Desværre er antagelsen om, at stderr kun bruges til fejludgang, ikke altid korrekt. I stedet er stderr ofte brugt til alle interaktive output og diagnostik (dvs. output beregnet til brugeren at læse i en interaktiv prompte). (1) wget og dd er velkendte eksempler.

Nogle kommandoer vil give et flag (dvs. -quiet eller -silent ) for at undertrykke ikke-fejl output. Læs deres man pages for at se om der findes.

En anden konvention, der besidder oftere, er exit kode , et program returnerer en exit kode, når den udgår. Typisk (2) indikerer en exitkode på 0 succes, og enhver anden exitkode angiver en fejl.

Med bash kan du få exit kode for den sidste kommando fra $? variablen. I fisk skal du bruge variablen $ status . Du kan røre stderr til en midlertidig fil og udskrive den kun, hvis der opstår en fejl. For eksempel ( fisk ):

Du kan også bruge nogle genveje, hvis du ikke kæder kommandoer:

Eller:

Du kan også røre stdout til det samme buffer ved at bruge 2> & 1> / tmp / outputbuffer .

( Bemærk: Jeg ved faktisk ikke fisk , så jeg tilpasser konceptet til hvad jeg kan finde i sin dokumentation. Syntaxen kan være lidt forkert. Du kan også bruge mktemp til at generere en unik midlertidig fil. Kør det og optag filnavnet i en variabel.)

Hvis du skal køre det hele i baggrunden af ​​en shell, som du også bruger interaktivt på samme tid, så er du bedre til at skrive et script til at håndtere output-skjule og køre det script i baggrunden med standardteknikkerne ( fisk ). Heck, du kan sætte noget som følgende funktion i ~ / .config / fish / config.fish :

Ring med run-silent somecommand & (hvor den efterfølgende & får det til at køre i baggrunden)

Bemærk, at dette vil sluge den oprindelige exitkode og vil dumpe både stdout og stderr i tilfælde af en fiasko. Du kan tilpasse det efter behov.

(1) Der er ingen garanti for, at fejl output ikke vises på stdout , og nogle programmer vil dumpe alle output der!

(2) Desværre er det stadig ikke altid tilfældet. Afgangskoden styres fuldstændigt af programmet, og nogle vil indikere nogle succesbetingelser med ikke-nul-udgange. Igen skal du tjekke manualen.

Efterfulgt af svaret fra Maximillian Laumeister:

Unix-værktøjer sender generelle meddelelser til stdout og fejlmeddelelser til stderr , så hvis vi kun vil se fejlmeddelelser, så er det tilstrækkeligt at undertrykke stdout , så kun stderr får output til konsollen.

Måden at gøre dette på (i både bash og fisk ) skal tilføjes > / dev / null til kommandoen. Disse rør stdout til intet, men stderr (med dine fejlmeddelelser) kommer stadig frem til konsollen.

Så f.eks .:

Kommandoen ekko 1 > / dev / null udskriver intet, fordi den normale stdout output er undertrykt, og der er ikke skrevet noget til stderr .

Kommandoen mand doesnotexist> / dev / null udskriver en fejlmeddelelse, fordi mand skriver sin fejlmeddelelse til stderr .


Har du noget at tilføje til forklaringen? Lyde af i kommentarerne. Vil du læse flere svar fra andre tech-savvy Stack Exchange brugere? Se hele diskussionsgruppen her.


Hvorfor er spil langsommere med batteristrøm selv med en højtydende power plan valgt?

Hvorfor er spil langsommere med batteristrøm selv med en højtydende power plan valgt?

Hvis du elsker at spille spil, så vil du helt sikkert have den bedste ydeevne, du kan komme ud af din computer, men hvad hvis spil på din bærbare computer sænkes selv med en højtydende power plan valgt? Dagens SuperUser Q & A-indlæg har svarene på et forvirret læsers spørgsmål. Dagens Spørgsmål og Svar-sessions kommer til vores side med SuperUser-en underafdeling af Stack Exchange, en community-driven gruppe af Q & A-websteder.

(how-to)

Hvis du er træt af et uheld at dræbe din ven, mens du kæmper med fjender i nærheden, eller hvis dine børn skriger, fordi en af dem 8-bit-myrdet den anden igen, dette er selvstudiet for dig. Læs videre, da vi viser dig, hvordan du kan deaktivere spiller vs spillerskade i Minecraft en gang for alle.

Hvis du er træt af et uheld at dræbe din ven, mens du kæmper med fjender i nærheden, eller hvis dine børn skriger, fordi en af dem 8-bit-myrdet den anden igen, dette er selvstudiet for dig. Læs videre, da vi viser dig, hvordan du kan deaktivere spiller vs spillerskade i Minecraft en gang for alle.

Hvis du kæmper dine venner i ølkamp i Lord-of-the-Flies-stil Det er helt grunden til, at du nyder at spille Minecraft, end det er bestemt ikke vejledningen til dig. Hvis du imidlertid er en af ​​de mange mennesker, der er irriteret over hvor let det er at skære dine venner med dit sværd i stedet for zombierne, der angriber din base, finder du det nyttigt.

(how-to)