Bash'da:
$ echo hi 2>&1 1>/dev/null | cat
$
Zsh'deyken:
$ echo hi 2>&1 1>/dev/null | cat
hi
$
Standart çıkış yeniden yönlendirilirken yalnızca standart hata oluşturmanın bir yolu var mı?
Bash'da:
$ echo hi 2>&1 1>/dev/null | cat
$
Zsh'deyken:
$ echo hi 2>&1 1>/dev/null | cat
hi
$
Standart çıkış yeniden yönlendirilirken yalnızca standart hata oluşturmanın bir yolu var mı?
Yanıtlar:
Zsh ile ve açık (varsayılan olarak açık) mult_ios
seçeneği ile:
echo hi 2>&1 1>/dev/null | cat
Bu 1> /dev/null | cat
, echo
stdout'un çoklu yönlendirmesi olarak görülür .
Yani echo
's stdout şimdi her ikisine /dev/null
ve bir boruya cat
(sanki kullanılıyor gibi tee
) yönlendirilir.
Bu çoklu yönlendirmeyi iptal etmek için şunları yapabilirsiniz:
echo hi 2>&1 >&- > /dev/null | cat
Yani, yeniden yönlendirmeden önce stdout'u kapatmak (boruları iptal etmek) /dev/null
Veya aşağıdaki gibi bir komut grubu veya alt kabuk kullanın:
{echo hi 2>&1 1>/dev/null} | cat
(echo hi 2>&1 1>/dev/null) | cat
Bu şekilde, echo
'stdout yalnızca bir kez açıkça yönlendirilir (gruba / alt kabuğa boru yeniden yönlendirmesi uygulanır ve tarafından devralınır echo
).
Veya multios
tamamen devre dışı bırakabilirsiniz :
(setopt nomultios; echo hi 2>&1 > /dev/null | cat)
Alternatif olarak, bir boru yerine işlem ikamesi kullanabilirsiniz :
echo hi 2> >(cat) > /dev/null
Ancak, iş kontrolü kapalıyken (komut dosyalarında olduğu gibi), cat
işlemin senkronize olmayan bir şekilde (başlangıçta olduğu gibi) çalışacağına dikkat edin &
.
{echo...}|cat
) ile çalışır
(echo hi 2>&1 1>/dev/null) | cat
.