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/null
als 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