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.


Hva er en nettleserens brukeragent?

Hva er en nettleserens brukeragent?

Nettleseren din sender sin brukeragent til hvert nettsted du kobler til. Vi har skrevet om å endre nettleserens brukeragent før - men hva er en brukeragent, uansett? En brukeragent er en "streng" - det vil si en tekstlinje - som identifiserer nettleseren og operativsystemet til Internett server. Dette høres enkelt, men brukeragenter har blitt et rot i løpet av tiden.

(how-to)

Løsne et tilfeldig flytte eller slette med en hurtigtast i Windows Utforsker

Løsne et tilfeldig flytte eller slette med en hurtigtast i Windows Utforsker

Har du noen gang ved et uhell slettet feil fil eller dupliserte filer mens du prøver å velge dem med musen? Disse typer feil kan være svært frustrerende, men det er en veldig, veldig enkel måte å reversere dem på. Alt du trenger å gjøre er å bruke Ctrl + Z-tastaturgenveien, eller bruk Rediger Angre på menyen.

(how-to)