nl.phhsnews.com


nl.phhsnews.com / Hoe voer je een opdracht op de achtergrond uit zonder een fout, tenzij er een fout is?

Hoe voer je een opdracht op de achtergrond uit zonder een fout, tenzij er een fout is?


Als je een druk persoon bent, is het laatste dat je nodig hebt, lastig gevallen met een enorme hoeveelheid 'nutteloze' meldingen, dus hoe stel je de dingen tot rust? De SuperUser Q & A-post van vandaag biedt enkele geweldige antwoorden om een ​​lezer te helpen de hoeveelheid output te verminderen.

De Question & Answer-sessie van vandaag komt tot ons dankzij SuperUser - een onderdeel van Stack Exchange, een door de gemeenschap gestuurde groep van Q & A-websites.

De vraag

SuperUser-lezer Xster wil weten hoe een opdracht op de achtergrond wordt uitgevoerd zonder uitgang, tenzij er een fout is:

Hoe onderdruk je de uitvoer van een opdracht, maar toon deze als de afsluitcodes van de opdracht een fout?

Hoe krijg je een opdracht op de achtergrond zonder output tenzij er een fout is?

De antwoorden

SuperUser-bijdragers Bob en Maximillian Laumeister hebben het antwoord voor ons. Ten eerste, Bob:

Helaas is de aanname dat stderr alleen wordt gebruikt voor foutuitvoer niet altijd correct. In plaats daarvan wordt stderr vaak gebruikt voor elke en alle interactieve uitvoer en diagnostiek (dwz uitvoer bedoeld voor de gebruiker om in een interactieve aanwijzing te lezen). (1) wget en dd zijn bekende voorbeelden.

Sommige opdrachten zullen een vlag (bijv. -roost of -silatie ) leveren om niet-foutuitvoer te onderdrukken. Lees hun man-pagina's om te zien of er een bestaat.

Een andere conventie die vaker voorkomt is de exit-code , een programma retourneert een exit-code wanneer deze wordt afgesloten. Typisch (2) geeft een afsluitcode van 0 succes aan en geeft elke andere exitcode een fout aan.

Met bash kunt u de afsluitcode van de laatste opdracht van de variabele $? . Gebruik in vissen de $ status -variabele. U kunt stderr naar een tijdelijk bestand leiden en het alleen afdrukken als er een fout optreedt. Bijvoorbeeld ( vis ):

U kunt ook enkele snelkoppelingen gebruiken als u geen opdrachten koppelt:

Of:

U kunt ook stdout naar dezelfde pipe pipen buffer met 2> & 1> / tmp / outputbuffer .

( Opmerking: Ik ken geen vissen , dus ik pas het concept aan wat ik kan vinden in de documentatie. De syntaxis kan enigszins verkeerd zijn. Je kunt ook mktemp gebruiken om een ​​uniek tijdelijk bestand te genereren. Voer het uit en noteer de bestandsnaam in een variabele.)

je moet het hele ding uitvoeren op de achtergrond van een shell die je ook op hetzelfde moment interactief gebruikt, dan kun je beter een script schrijven om de uitvoer te verwerken en dat script op de achtergrond met de standaardtechnieken ( vis ). Je kunt ook zoiets als de volgende functie plaatsen in ~ / .config / fish / config.fish :

Bellen met run-silent somecommand & (waar de < > & zorgt ervoor dat het op de achtergrond wordt uitgevoerd)

Merk op dat dit de originele afsluitcode zal inslikken en zowel stdout als stderr zal dumpen in geval van een mislukking. U kunt het naar wens aanpassen.

(1) Er is geen garantie dat de foutuitvoer niet verschijnt op stdout , sommige programma's zullen daar alle uitvoer dumpen!

(2) Helaas is dit nog steeds niet altijd het geval. De exitcode wordt volledig beheerd door het programma en sommige zullen enkele succesvoorwaarden aangeven met niet-nul-uitgangen. Zie nogmaals de handleiding.

Gevolgd door het antwoord van Maximillian Laumeister:

Unix-hulpprogramma's sturen algemene berichten naar stdout en foutmeldingen naar stderr , dus als we alleen wil je foutmeldingen zien, dan is het voldoende om stdout te onderdrukken zodat alleen stderr uitvoer naar de console krijgt.

De manier om dit te doen (in beide bash en fish ) is om > / dev / null toe te voegen aan het commando. Deze pijp stdout in het niets, maar stderr (met je foutmeldingen) komt nog steeds door naar de console.

Dus bijvoorbeeld:

Het commando echo 1 > / dev / null drukt niets af, omdat de normale uitvoer van stdout wordt onderdrukt en er wordt niets geschreven naar stderr .

Het commando man doesnotexist> / dev / null drukt een foutmelding af, omdat man schrijft zijn foutmelding naar stderr .


Heeft u iets toe te voegen aan de uitleg? Geluid uit in de reacties. Wilt u meer antwoorden van andere technisch onderlegde Stack Exchange-gebruikers lezen? Bekijk hier de volledige discussiethread


Hoe u de kleuren in een PDF-bestand in Adobe Acrobat Reader kunt omkeren voor eenvoudiger leesgemak

Hoe u de kleuren in een PDF-bestand in Adobe Acrobat Reader kunt omkeren voor eenvoudiger leesgemak

Het PDF-formaat is bedoeld om ervoor te zorgen dat de opmaak van een document behouden blijft wanneer bekeken op verschillende besturingssystemen en apparaten. Als u een document bekijkt op een pc in een donkere kamer, wilt u misschien het kleurenschema wijzigen zodat het scherm niet zo helder is. Adobe Acrobat Reader heeft speciaal hiervoor een speciale instelling en we zullen tonen u hoe u verschillende kleurenschema's kunt selecteren die meer geschikt zijn om in het donker te lezen.

(how-to)

De How-To Geek-gids om aan de slag te gaan met LastPass

De How-To Geek-gids om aan de slag te gaan met LastPass

Het is maar al te gemakkelijk om slordig te worden met uw wachtwoordbeveiliging als het aantal accounts en bijbehorende wachtwoorden zich opstapelen. Het is tijd om LastPass te laten genereren en beheren van uw stabiele of veilige wachtwoorden. Wat is LastPass en waarom heb ik het nodig? LastPass is een hulpprogramma voor wachtwoordbeheer dat u moeite kost om uw wachtwoorden te beheren - het is zo moeiteloos, in feite, dat het de meest populaire tool voor wachtwoordbeheer is onder How-To Geek-lezers.

(how-to)