【发布时间】:2020-09-12 20:19:59
【问题描述】:
这是一个示例 -
Terminal1
$ ./file_name1.sh
Terminal2
$ ./file_name2.sh
更具体地说,我想要的是,从一个程序同时在一个终端上打印stdout 和在另一个终端上打印stderr。
可以使用terminator 之类的终端或任何其他终端来完成吗?
【问题讨论】:
这是一个示例 -
Terminal1
$ ./file_name1.sh
Terminal2
$ ./file_name2.sh
更具体地说,我想要的是,从一个程序同时在一个终端上打印stdout 和在另一个终端上打印stderr。
可以使用terminator 之类的终端或任何其他终端来完成吗?
【问题讨论】:
终端作为设备公开。如果您在/dev/tty/1 上有终端 1,在 /dev/tty/2 有终端 2,您可以运行
./file_name_1.sh >/dev/tty/1 2>/dev/tty/2
在终端 1 中显示标准输出,在终端 2 中显示标准输出。当然,如果您在其中一个终端中还有其他任何东西,例如交互式 shell,那么您就是在给自己弄得一团糟。可能更好的解决方案是记录到一个文件,然后在您认为合适的每个终端中对您想要查看的文件运行tail。
./file_name_1.sh >stdout.log 2>stderr.log
然后在 1 号航站楼
tail -f stdout.log
在 2 号航站楼
tail -f stderr.log
tty命令可以交互方式显示当前终端的信息;在大多数平台上,您还可以在ps 输出中看到终端信息,但具体使用哪些选项取决于您使用的操作系统。在 Linux 上,一般先尝试ps a。
【讨论】:
您可以创建一对命名管道并将 stdout 和 stderr 重定向到这些管道。 在您喜欢的任何终端上,您都可以从这些管道中读取数据。
mkfifo mystdout
mkfifo mystderr
./program >mystdout 2>mystderr
在 1 号航站楼:
tail -f mystdout
在 2 号航站楼:
tail -f mystderr
【讨论】: