更改 stdout/stderr 输出设备

更改 stdout/stderr 输出设备

默认情况下,如果我们运行

foo(){
  echo "myfoo"
}

它将转到标准输出。我的问题是,对于 bash 脚本或函数,是否有一种编程方式来更改设备,以便命令不会自动写入标准输出?

也许是这样的:

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

所以我们也许在其他地方“重新指向”标准输出?

答案1

这种技术可能会达到目的: 使用进程替换,仅发送 stderr 到进程

基本上,你打电话:

exec > $some_file

使用进程替换,您可以执行以下操作:

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

这意味着所有标准输出都将转到该文件而不是终端。

相关内容