Próbowałem różnych sposobów przekierowania zarówno do, jak stdout
i bezskutecznie. Mam prawie całe życie bash, z którym nigdy nie miałem tego problemu, ale raz w BSD utknąłem .stderr
/dev/null
/bin/sh
Co próbowałem:
if ls ./python* 2> /dev/null; then
echo found Python
fi
... który działa; jeśli Python nie jest obecny, wyciszy komunikaty o błędach z ls. Jeśli jednak python.tgz
jest obecny, wypisywany jest wiersz, który wygląda następująco:
# ./test.sh
./python-2.7.3p1.tgz
Próbowałem:
if ls ./python* &> /dev/null; then
echo found Python
fi
i
if ls ./python* 2>1 > /dev/null; then
echo found Python
fi
i
if ls ./python* > /dev/null; then
echo found Python
fi
Nic tak naprawdę nie działa. Mogę przekierować tylko jedno z wyjść, a nie oba jednocześnie.
źródło
/bin/sh
wdrożyły&>/dev/null
składnią, aparently nie tak albo mam starszą wersję (co nie mogę Echo w jakikolwiek sposób, działa OpenBSD 5.3 tho więc powinno wystarczyć)sh
opiera się na pdksh. Obecnie nie ma już powłoki Bourne'a.csh
wprowadzone>&
również dostępne wzsh
.bash
wybrał&>
(teraz również obsługiwany przezzsh
i niektórepdksh
pochodne), choć wyraźnie łamie zgodność z POSIX, ponieważfoo &> file
jest to całkowicie poprawna składnia POSIX, co oznacza coś zupełnie innego.foo &> file
jest podobny do,foo & > file
lubfoo & : > file
jest uruchamiany foo w tle i otwiera plik do pisania bez żadnej komendy (jest mało prawdopodobne, aby był używany w ten sposób).>&
nie jest idealny zarówno jako to sprzeczne z>&2
,>&-
operatorów.zsh
dodano go dla wygody użytkowników csh (csh nie ma>&2
). To tylko cukier syntaktyczny, wystarczy użyć,> file 2>&1
który jest standardowy i przenośny (do muszelek Bourne'a).