基本的に私たちが実行すると
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 )
これは、すべての標準出力が端末の代わりにこのファイルに移動することを意味します。