05 Feb Linux-idiomet 2>&1 đ€
Vad betyder egentligen idiomet 2>&1 ?
Ett idiom Àr ett typiskt eller rekommenderat sÀtt att göra nÄgonting i ett programsprÄk. ?
Exempelvis ls foo > /dev/null 2>&1
SÄ vad innebÀr egentligen de olika delarna i kommandot?
Symbolen “>” omdirigerar utdata.
Exempel – visa innehĂ„llet i en fil:
$ cat foo.txt
foo
bar
baz
Om vi vill skriva innehĂ„llet i en fil till ett annat stĂ€lle – exempelvis filen output.txt sĂ„ kan vi skriva:
$ cat foo.txt > output.txt
$ cat output.txt
foo
bar
baz
Obeservera att kommandot “cat” inte lĂ€ngre visar innehĂ„llewt i filen. Det beror pĂ„ att vi omdirigerat “standard out” (stdout) till “output.txt”!
Utöver stdout finns Ă€ven nĂ„got som kallas “standard error” (stderr) dit felmeddelanden skickas.
Exempel:
$ cat nop.txt > output.txt
cat: nop.txt: No such file or directory
Vi ser ett felmeddelande pĂ„ skĂ€rmen (filen finns inte) och filen “output.txt” kommer inte innehĂ„lla nĂ„gonting.
I Linux finns nĂ„got som kallas för “file descriptors”- detta Ă€r en positiv integer som representerar en öppen fil. Det betyder att bĂ„de stdout och stderr har siffror som representerar dem.
Vad som Àr vÀsentligt Àr att stdout alltid Àr 1 och stderr alltid Àr 2.
NĂ€r vi skriver:
$ cat foo.txt > output.txt
Ă€r det samma sak som
$ cat foot.tx 1> output.txt
Om vi vill komma Ät felmeddelandet stderr (2) sÄ skriver vi helt enkelt:
$ cat nop.txt 2> error.txt
$ cat error.txt
cat: nop.txt: No such file or directory
Men om vi vill hantera bĂ„de stdout och stderr dĂ„? đ
Jo “&1” Ă€r en referens till stdout – sĂ„ nĂ€r vi skriver 2>&1 sĂ„ betyder det:
“omdirigera felmeddelanden till samma stĂ€lle som stdout”!
Exempel:
$ cat foo.txt > output.txt 2>&1
$ cat output.txt
foo
bar
baz
$ cat nop.txt > output.txt 2>&1
$ cat output.txt
cat: nop.txt: No such file or directory
Om du tycker det var för enkelt tipsar vi om kursen för att kopiera en fil i Unix. đ