Saya telah mencoba segala macam cara untuk mengarahkan baik stdout
dan stderr
untuk /dev/null
tanpa keberhasilan. Saya memiliki hampir seluruh hidup saya menjalankan bash yang saya belum pernah mengalami masalah ini, tetapi untuk sekali di BSD saya terjebak dengan /bin/sh
.
Apa yang saya coba:
if ls ./python* 2> /dev/null; then
echo found Python
fi
... yang bekerja; jika Python tidak ada maka akan membisukan pesan kesalahan dari ls. Namun, jika python.tgz
ada, baris dengan akan ditampilkan yang terlihat seperti ini:
# ./test.sh
./python-2.7.3p1.tgz
Saya sudah mencoba:
if ls ./python* &> /dev/null; then
echo found Python
fi
dan
if ls ./python* 2>1 > /dev/null; then
echo found Python
fi
dan
if ls ./python* > /dev/null; then
echo found Python
fi
Tidak ada yang benar-benar berfungsi. Saya hanya bisa mengarahkan salah satu output, tidak keduanya sekaligus.
sumber
/bin/sh
telah mengimplementasikan&>/dev/null
sintaksis, aparently tidak jadi atau saya memiliki versi yang lebih lama (yang saya tidak bisa gema dengan cara apa pun, menjalankan OpenBSD 5.3 yang seharusnya cukup)sh
didasarkan pada pdksh. Tidak ada lagi Bourne shell saat ini.csh
diperkenalkan>&
juga tersedia dizsh
.bash
memilih&>
(sekarang juga didukung olehzsh
dan beberapapdksh
turunan) meskipun itu jelas melanggar kepatuhan POSIX karenafoo &> file
sintaks POSIX yang valid yang berarti sesuatu yang sama sekali berbeda.foo &> file
sepertifoo & > file
ataufoo & : > file
, yang menjalankan foo di latar belakang dan membuka file untuk menulis tanpa perintah sama sekali (tidak mungkin digunakan seperti itu).>&
tidak ideal baik sebagai bertentangan dengan>&2
,>&-
operator.zsh
menambahkannya untuk kenyamanan bagi pengguna csh (csh tidak punya>&2
). Mereka hanya gula sintaksis, cukup gunakan> file 2>&1
yang standar dan portabel (untuk cangkang mirip Bourne).