Hoe kan ik de uitvoer in een Bash-script dempen?

Ik heb een programma dat uitvoer naar stdout en zou die uitvoer in een Bash-script willen dempen terwijl het naar een bestand wordt doorgesluisd.

Als het programma bijvoorbeeld wordt uitgevoerd, wordt het volgende weergegeven:

% myprogram
% WELCOME TO MY PROGRAM
% Done.

Ik wil dat het volgende script niets naar de terminal uitvoert:

#!/bin/bash
myprogram > sample.s

Antwoord 1, autoriteit 100%

Als het ook naar stderr stuurt, wil je dat dempen. U kunt dat doen door bestandsdescriptor 2 om te leiden:

# Send stdout to out.log, stderr to err.log
myprogram > out.log 2> err.log
# Send both stdout and stderr to out.log
myprogram &> out.log      # New bash syntax
myprogram > out.log 2>&1  # Older sh syntax
# Log output, hide errors.
myprogram > out.log 2> /dev/null

Antwoord 2, autoriteit 39%

Stderr omleiden naar stdout

Hierdoor wordt de stderr (descriptor 2) omgeleid naar de bestandsdescriptor 1, de stdout.

2>&1

Redirect stdout naar bestand

Als u dit nu doet, leidt u de stdout om naar het bestand sample.s

myprogram > sample.s

Redirect stderr en stdout naar Bestand

Het combineren van de twee commando’s zal resulteren in het omleiden van zowel stderr als stdout naar sample.s

myprogram > sample.s 2>&1

Redirect stderr en stdout naar /dev/null

Redirect naar /dev/nullals je je applicatie volledig wilt stilzetten.

myprogram >/dev/null 2>&1

Antwoord 3, autoriteit 22%

Alle uitvoer:

scriptname &>/dev/null

Draagbaar:

scriptname >/dev/null 2>&1

Draagbaar:

scriptname >/dev/null 2>/dev/null

Voor nieuwere bash (niet draagbaar):

scriptname &>-

Antwoord 4, autoriteit 6%

Als je nog steeds moeite hebt om een ​​antwoord te vinden, vooral als je een bestand voor de uitvoer hebt gemaakt, en je geeft de voorkeur aan een duidelijk alternatief:

echo "hi" | grep "use this hack to hide the oputut :) "


Antwoord 5, autoriteit 6%

Als je STDOUT en STDERR beide [alles] wilt, dan is de eenvoudigste manier:

#!/bin/bash
myprogram >& sample.s

voer het dan uit zoals ./script, en je krijgt geen uitvoer naar je terminal. 🙂

de “>&” betekent STDERR en STDOUT. de &werkt ook op dezelfde manier met een pipe: ./script |& sed
die alles naar sed stuurt


Antwoord 6, autoriteit 3%

Probeer met:

myprogram &>/dev/null

om geen uitvoer te krijgen


7

Opmerking: dit antwoord is gerelateerd aan de vraag “Hoe u ECHO uitschakelt tijdens het uitvoeren van een Shell-script Linux” die op zijn beurt is gemarkeerd als gedupliceerd aan deze.

Om de echo de opdracht daadwerkelijk uit te schakelen:

sty -echo

(Dit is bijvoorbeeld; wanneer u een wachtwoord wilt invoeren en u wilt niet dat het leesbaar is. Vergeet niet om ECHO aan het einde van uw script te draaien, anders zal de persoon die uw script uitsluit, anders Zie wat hij / zij typeert vanaf dat moment. Om ECHO op Run te draaien:

sty echo

Other episodes