Itulah efek MULTIOS .
echo foo >&2 | grep foo
akan menulis fooke stderr dan juga pipa fooke grep. Karena stderr default ke terminal, Anda akan melihat dua foobaris, satu dari echo, satu dari grephasilnya.
{ echo foo >&2 | grep foo } >/dev/null
Di sini, Anda melihat satu baris karena stdout dialihkan ke /dev/null, Anda hanya melihat foogaris dari echo.
{ echo foo >&2 | grep foo } 2>/dev/null
Di sini, Anda melihat satu baris karena stderr dialihkan ke /dev/null, Anda hanya melihat foogaris dari grep.
Anda dapat dengan mudah melihat perbedaan di terminal dengan warna garis keluaran. grepakan menyorot pola yang cocok (atau Anda bisa memaksanya dengan menggunakan --color=always).
MULTIOSdiaktifkan secara default dengan nomultiosopsi tidak disetel:
$ unsetopt | grep nomultios
nomultios
Untuk menonaktifkannya, cukup atur nomultiosopsi:
$ setopt nomultios
{echo foo >&2} | grep foo, jika Anda melihat apa yang saya coba katakan. Saya pikir perintah yang saya tanyakan di atas akan mengarahkan stdout ke stderr dan kemudian mengirim stdout kosong ke grep.