Dalam bash:
$ echo hi 2>&1 1>/dev/null | cat
$
Sementara di zsh:
$ echo hi 2>&1 1>/dev/null | cat
hi
$
Apakah ada cara untuk mem-pipe standard error saja sambil mengarahkan keluar standar?
Dalam bash:
$ echo hi 2>&1 1>/dev/null | cat
$
Sementara di zsh:
$ echo hi 2>&1 1>/dev/null | cat
hi
$
Apakah ada cara untuk mem-pipe standard error saja sambil mengarahkan keluar standar?
Jawaban:
Dengan zsh dan dengan mult_ios
opsi aktif (diaktifkan secara default), di:
echo hi 2>&1 1>/dev/null | cat
Ini 1> /dev/null | cat
dilihat sebagai pengalihan ganda dari echo
stdout.
Jadi echo
stdout sekarang diarahkan ke keduanya /dev/null
dan pipa ke cat
(seolah-olah menggunakan tee
).
Untuk membatalkan beberapa pengalihan, Anda dapat melakukan:
echo hi 2>&1 >&- > /dev/null | cat
Artinya, menutup stdout (membatalkan perpipaan) sebelum dialihkan ke /dev/null
Atau gunakan grup perintah atau subkulit seperti:
{echo hi 2>&1 1>/dev/null} | cat
(echo hi 2>&1 1>/dev/null) | cat
Dengan begitu, echo
stdout hanya dialihkan secara eksplisit sekali (pengalihan pipa diterapkan ke grup / subkulit dan diwarisi oleh echo
).
Atau Anda dapat menonaktifkan multios
semuanya:
(setopt nomultios; echo hi 2>&1 > /dev/null | cat)
Atau, Anda bisa menggunakan proses substitusi alih-alih pipa:
echo hi 2> >(cat) > /dev/null
Namun cat
berhati- hatilah ketika kontrol pekerjaan dimatikan (seperti dalam skrip), proses akan berjalan secara tidak sinkron (seolah-olah dimulai dengan &
).
{echo...}|cat
)
(echo hi 2>&1 1>/dev/null) | cat
.