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_iosseçeneği ile:
echo hi 2>&1 1>/dev/null | cat
Bu 1> /dev/null | cat, echostdout'un çoklu yönlendirmesi olarak görülür .
Yani echo's stdout şimdi her ikisine /dev/nullve 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 multiostamamen 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), catiş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.