Zahodenie chybového výstupu
Ak chcem v príkaze:
find web \( -name *.jpg -o -name *.html \) -exec cp {} archiv \;
zahodiť všetky chybové výstupy, tak stačí dať 2>/dev/null za celý príkaz alebo ho treba dať aj pred \; ?
Ak chcem v príkaze:
find web \( -name *.jpg -o -name *.html \) -exec cp {} archiv \;
zahodiť všetky chybové výstupy, tak stačí dať 2>/dev/null za celý príkaz alebo ho treba dať aj pred \; ?
Pokud máte zahodit všechny chyby, musíte je zahodit všude, kde mohou vzniknout. V tomto případě mohou chyby vzniknout ve find
i v cp
.
A možná radši odpovím i na něco, na co jste se neptal, ale je to důležité: Pokud napíšete find dir -name *.ext
, tak je to naprosto špatně: Ta hvězdička se vyhodnotí v rámci zpracování příkazové řádky shellem, takže find ve skutečnosti nedostane parametry $1="dir", $2="-name", $3="*.ext"
, ale například (v závislosti na tom, co máte za soubory v aktuálním adresáři) $1="dir", $2="-name", $3="a.ext", $4="b.ext"
a samozřejmě na tom spadne, protože za -name
očekává jediný argument a potom zase nějaký predikát. Ono vám to při testech zafunguje, protože vás nenapadlo si v aktuálním adresáři vytvořit soubory s příponou .ext
, takže shell zjistí, že požadavku *.ext
nic nevyhovuje a tudíž volanému programu předá přímo *.ext
, ale na ProgTestu na tom vyhoříte.
Asked: 2014-12-15 22:24:06 +0100
Seen: 92 times
Last updated: Dec 16 '14