Bash

使用程序替換,只發送 stderr 到程序

  • May 8, 2018

我有這個:

exec > >( while read line; do echo " stdout: $line"; done )
exec 2> >( while read line; do echo " stderr: $line"; done )

echo "rolo"
>&2 echo "cholo"

如果您執行該腳本,則會產生以下輸出:

標準輸出:rolo

標準輸出:標準錯誤:cholo

我怎樣才能只將 stderr 發送到第二個程序替換行?我不明白。

我不明白為什麼會這樣:

標準輸出:rolo

標準輸出:標準錯誤:cholo # 什麼哈哈

您以錯誤的順序設置了重定向。第二個程序替換的標準輸出(以 為前綴stderr:)的標準輸出以第一個程序替換為前綴,因為它是在之後執行的。

試試這個:

exec 2> >( while read line; do echo " stderr: $line"; done )
exec > >( while read line; do echo " stdout: $line"; done )

echo "rolo"
echo "cholo" >&2

這輸出

stderr: cholo
stdout: rolo

這就是我想你想要的。

引用自:https://unix.stackexchange.com/questions/442461