stdout/stderr 出力デバイスの変更

stdout/stderr 出力デバイスの変更

基本的に私たちが実行すると

foo(){
  echo "myfoo"
}

標準出力に移動します。私の質問は、bashスクリプトまたは機能を使用してコマンドが自動的にstdoutに書き込まれないようにデバイスを変更するプログラムはありますか?

たぶん、次のようなものがあります。

foo(){
  mkfifo bar
  exec 1<>bar
  echo "myfoo"  # this gets written to the bar named pipe?
}

それでは、stdoutを別の場所に「再表示」できますか?

答え1

この手法はトリックを実行できます。 プロセス置換を使用し、stderrだけをプロセスに送信します。

デフォルトでは、次のように呼び出します。

exec > $some_file

プロセス置換を使用すると、次のことができます。

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

これは、すべての標準出力が端末の代わりにこのファイルに移動することを意味します。

関連情報