no.phhsnews.com


no.phhsnews.com / Hvordan kjører du en kommando i bakgrunnen uten utgang med mindre det er en feil?

Hvordan kjører du en kommando i bakgrunnen uten utgang med mindre det er en feil?


Hvis du er en travel person, så er det siste du trenger å bli plaget med en stor antall "ubrukelige" varsler, så hvordan stopper du tingene ned? Dagens SuperUser Q & A-post har noen gode svar for å hjelpe en leser til å stille ned mengden av utdata.

Dagens spørsmål og svar-sesjon kommer til oss med høflighet av SuperUser-en underavdeling av Stack Exchange, en fellesskapsdrevet gruppe av Q & A-nettsteder.

Spørsmålet

SuperUser-leseren Xster vil vite hvordan man kjører en kommando i bakgrunnen uten utdata med mindre det er en feil:

Hvordan undertrykker du en kommandos utgang, men viser den om kommandoen er utgangskoder en feil?

Hvordan får du en kommando til å kjøre i bakgrunnen uten utdata med mindre det er en feil?

Svaret

SuperUser-bidragsytere Bob og Maximillian Laumeister har svaret for oss. Først opp, Bob:

Dessverre er antagelsen om at stderr bare brukes til feilutgang, ikke alltid korrekt. I stedet er stderr ofte brukt for alle interaktive utdata og diagnostikk (dvs. utgang som er beregnet for brukeren å lese i en interaktiv spørring). (1) wget og dd er kjente eksempler.

Noen kommandoer vil gi et flagg (dvs. -quiet eller -silent ) for å undertrykke ikke-feilutgang. Les deres mantsider for å se om en eksisterer.

En annen konvensjon som holder oftere er utgangskode , et program returnerer en utgangskode når den utgår. Vanligvis (2) indikerer en utgangskode på 0 suksess, og noen annen utgangskode indikerer en feil.

Med bash kan du få avslutningskode for den siste kommandoen fra variabelen $? . I fisk , bruk $ status variabelen. Du kan røre stderr til en midlertidig fil og bare skrive ut den hvis det oppstår en feil. For eksempel ( fisk ):

Du kan også bruke noen snarveier hvis du ikke kjeder kommandoer:

Eller:

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

( Merk: Jeg vet egentlig ikke fisk , så jeg tilpasser konseptet til Du kan også bruke mktemp for å generere en unik midlertidig fil. Kjør den og ta opp filnavnet i en variabel.)

Hvis du må kjøre alt i bakgrunnen av et skall som du også bruker interaktivt på samme tid, da er det bedre å skrive et skript for å håndtere utdataene som skjuler og kjører det skriptet i bakgrunnen med standardteknikker ( fisk ). Heck, du kan sette noe som følgende funksjon i ~ / .config / fish / config.fish :

Ring med run-silent somecommand & (der den etterfølgende & får det til å kjøre i bakgrunnen)

Merk at dette vil svelge den opprinnelige utgangskoden, og vil dumpe både stdout og stderr i tilfelle en svikt. Du kan tilpasse det etter behov.

(1) Det er ingen garanti for at feilutgangen ikke vises på stdout , noen programmer vil dumpe alle utdataene der!

(2) Dessverre er dette fortsatt ikke alltid tilfelle. Utgangskoden er helt kontrollert av programmet, og noen vil indikere noen suksessforhold med nullutganger. Igjen, sjekk håndboken.

Etterfulgt av svaret fra Maximillian Laumeister:

Unix-verktøy sender generelle meldinger til stdout og feilmeldinger til stderr , så hvis vi bare Vil du se feilmeldinger, vil det være tilstrekkelig å undertrykke stdout slik at bare stderr får utgang til konsollen.

Måten å gjøre dette på (i begge bash og fisk ) er å legge til > / dev / null til kommandoen. Disse rørene stdout til ingenting, men stderr (med feilmeldingene dine) kommer frem til konsollen.

Så for eksempel:

Kommandoen ekko 1 > / dev / null skriver ingenting, fordi det normale Stdout -utgangen er undertrykt, og ingenting ble skrevet til stderr .

Kommandoen mannen doesnotexist> / dev / null skriver en feilmelding fordi mann skriver feilmeldingen sin til stderr .


Har du noe å legge til forklaringen? Lyder av i kommentarene. Vil du lese flere svar fra andre tech-savvy Stack Exchange-brukere? Se hele diskusjonstråden her.


Slik oppgraderer du til Microsoft Office 2016

Slik oppgraderer du til Microsoft Office 2016

Hvis du for øyeblikket har et abonnement på Office 365, vil du gjerne vite at du kan oppgradere til Office 2016 akkurat nå, bare om en få minutter. I dag vil vi raskt vise deg hvordan du gjør det på en Windows-PC og Apple Mac. RELATED: Slik avinstallerer du Office 2011 for Mac OS X Office 2016 er en velkomstoppgradering for eksisterende Kontorinstallasjon, spesielt for Mac-brukere som har lidd under den ganske forferdelige Office 2011 med sitt stygge, klumpete grensesnitt.

(how-to)

Hvorfor PC-spillere hatet Microsofts

Hvorfor PC-spillere hatet Microsofts "Games for Windows Live"

Microsoft kolliderer med PC-spillsamfunnet igjen, med alle fra PC-spillere til konsernsjef for Epic som kritiserer Microsofts Universal Windows Platform. Microsoft har ikke mye godwill igjen i PC-spill-fellesskapet, takk spesielt til den katastrofale tjenesten "Games for Windows Live" fra noen år tilbake .

(how-to)