Jij zoekt dit:
Voorbeeld:
code:
1
2
3
4
5
6
7
| $ var=$(mkdir xxx 2>&1 >&-)
$ echo $var
$ var=$(mkdir xxx 2>&1 >&-)
$ echo $var
mkdir: cannot create directory `xxx': File exists
$ |
Dus eerst stderr duplicaten als stdout en daarna de oorspronkelijke stdout dichtgooien. Je ziet het nog beter als je 'mkdir -v' gebruikt. Normaal gesproken zie je dan de aanmaakacties in stdout verschijnen, maar met de constructie 2>&1 >&- zijn die verdwenen. Alleen foutmeldingen komen in $var terecht, ongeacht wat er door mkdir naar stdout wordt gestuurd.
>&- en >/dev/null hebben het zelfde effect: je bent stdout kwijt. Strikt genomen is het niet identiek: de eerste constructie gooit het kanaal dicht, de tweede blijft open en stuurt de info door naar /dev/null; dat je het nooit meer ziet is een ander verhaal natuurlijk.
Dit klopt niet:
Je bedoelt waarschijnlijk hetzelfde, alleen is het verkeerd om... je stuurt eerst de originele stdout naar een zwart gat en vervolgens stderr naar de plek waar
op dat moment stdout naar staat te wijzen, dus ook naar het zwarte gat. De volgorde is belangrijk!
Andersom, met '2>&1 >/dev/null' gaat het wel goed: stderr wordt gedupliceerd als stdout (hij opent ahw een 2e stdout-kanaal), daar gaat stderr vanaf dat moment heen. Daarna kan je de oorspronkelijke stdout weggooien met >/dev/null.
[
Voor 45% gewijzigd door
Verwijderd op 13-04-2006 18:37
]