Linux-idiomet 2>&1 đŸ€“

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. 😂

Tags: