Vraag Wat levert output naar / dev / null op in bash-scripts? [duplicaat]


Deze vraag heeft hier al een antwoord:

Vaak kom ik kleine bash-scripts tegen die dit soort syntaxis gebruiken in if-statements:

wat commando > /dev/null 2>&1

Wat is het doel van het uitvoeren naar /dev/null zoals dat, en wat doet het 2>&1 gemiddelde?

Het lijkt altijd te werken, maar ik zou graag willen weten wat het doet.


96
2017-11-08 14:20


oorsprong


Niet zeker waarom deze vraag als een dupe werd gemarkeerd, het was duidelijk open voor 3 jaar voordat de andere zelfs werd gepost. - javanix
muru heeft zijn strepen verdiend en hoewel hij van tijd tot tijd aan het verliezen is van zijn oordeel, vertrouw ik hem met het afsluiten van deze vraag, zelfs als hij 3 jaar ouder is zoals je zegt. Ik heb geen vraag of antwoorden gelezen, maar ik vermoed dat zijn oordeel is gebaseerd op het feit dat er betere antwoorden zijn aan de andere kant. Toevallig heb ik zojuist geïmplementeerd: `` bash -c "echo $ IntBrightness | sudo tee $ backlight"> / dev / null` vanavond om ongewenste terminaluitvoer te onderdrukken. U kunt dit markeren met een mod en gevraagd dat alle dupe kandidaatantwoorden worden samengevoegd in deze Q & A. Het lijkt echter veel werk ... - WinEunuuchs2Unix
Ik zag net dat je de OP was en niet een voorbijganger. Ik heb zowel Q & As als mijn stem bekeken om uw vraag opnieuw te openen. Ik denk dat de jouwe algemener is en voldoet aan mijn behoeften vanavond (het wegwerken van 650 of 3000 echode naar het scherm op basis van de helderheidsniveaus 's nachts of overdag. Terwijl de andere kwestie alleen betrekking heeft op foutmeldingen (File Descriptor 2> / dev / null), is één berucht voorbeeld Gtk transient parent in Zenity en Yad die Dialog Windows gebruiken in plaats van full windows. Mijn eerste reactie was te snel ... PS met opmaak: bash -c "echo $IntBrightness | sudo tee $backlight" > /dev/null - WinEunuuchs2Unix


antwoorden:


>/dev/null leidt de uitvoer van de opdrachtstand naar het nulapparaat om, wat een speciaal apparaat is dat de informatie weggooit die eraan is geschreven

2>&1 leidt de standaard foutstroom om naar de standaard uitvoerstroom (stderr = 2, stdout = 1). Merk op dat dit de standaard foutstroom neemt en naar dezelfde locatie verwijst als standaarduitvoer op dat moment. Dit is de reden voor de bestelling >/some/where 2>&1 omdat je eerst stdout naar ergens moet wijzen en dan punt stderr naar dezelfde locatie als men aan het einde beide streams wil combineren.

In de praktijk wordt voorkomen dat uitvoer van de opdracht (zowel stdout als stderr) wordt weergegeven. Het wordt gebruikt als u niet om de uitvoer van het commando geeft.


130
2017-11-08 14:31



En wat doet dat & voor 1 aangeven in 2 >&1 - Nobody
@Nobody "& geeft aan dat wat volgt een bestandsdescriptor is en geen bestandsnaam." stackoverflow.com/a/818284/5948237 - Vivek Chavda


STDIN wordt weergegeven met 0, STDOUT met 1 en STDERR met 2.

/ Dev / null is de bit-bucket: de plaats waar je dingen dumpt die je niet nodig hebt.


Dus, de STDOUT wordt doorgestuurd naar de bit-bucket (trash) en de STDERR wordt omgeleid naar waar de STDOUT zich bevindt: de bit-bucket.


U kunt dit ook doen:

>/dev/null 2>/dev/null

53
2017-11-08 14:59



Leuke uitleg. Ik denk ook dat er een snelkoppeling is voor het bovenstaande: &> / dev / null - Chip Castle
De snelkoppelingen &> en >& worden een beetje afgekeurd omdat dat "bashisme" is - waarmee ze werken bash shell maar zijn niet compatibel met sommige andere POSIX-compatibele shells. De >... 2>&1 ... syntaxis werkt in elke POSIX-compatibele shell. - Mikko Rantalainen