Bash重定向同步困境

Bash重定向同步困境,bash,stdout,stderr,Bash,Stdout,Stderr,为了自动化一些系统更新功能,我编写了一些BASH脚本 我想要实现的是将stdout和stderr重定向到日志文件,将stderr重定向到运行脚本的终端 这就是我到目前为止的想法: (/cmd>logfile)2>&1)| tee logfile 注意./cmd在这里是一个占位符,在我的脚本中,它实际上是对我的一台机器的ssh调用 不幸的是,从两个不同的进程写入同一个文件并不理想。我的update.log显然显示了两个写操作互相践踏的迹象。 我希望日志交错,以便抛出的错误接近相关的标准输出,因此写

为了自动化一些系统更新功能,我编写了一些BASH脚本

我想要实现的是将stdout和stderr重定向到日志文件,将stderr重定向到运行脚本的终端

这就是我到目前为止的想法:
(/cmd>logfile)2>&1)| tee logfile

注意./cmd在这里是一个占位符,在我的脚本中,它实际上是对我的一台机器的ssh调用

不幸的是,从两个不同的进程写入同一个文件并不理想。我的update.log显然显示了两个写操作互相践踏的迹象。 我希望日志交错,以便抛出的错误接近相关的标准输出,因此写入单独的文件并在以后合并它们实际上不是一个选项


任何建议都将不胜感激。

tee将其stdin复制到控制终端,将
/cmd
的stderr管道连接到tee的stdin,并将两个程序的stdout重定向到连接到日志文件的文件描述符tee不会缓冲其输出,因此请确保
/cmd
也不会缓冲,并希望一切顺利

{ stdbuf -o 0 ./cmd 2>&1 >&3 | tee /dev/tty >&3; } 3>logfile