Linux 重定向新xterm';将输出返回到原始终端

Linux 重定向新xterm';将输出返回到原始终端,linux,bash,xterm,Linux,Bash,Xterm,例如,我有一个非常简单的脚本,ping.sh: #!/bin/bash /usr/bin/xterm -e ping localhost 现在,ping的输出只显示在新的xterm中。我希望在原始终端(ping.sh的stdout)和新的xterm中都显示输出。有办法做到这一点吗 PS:我正在为这个标题苦苦挣扎。这似乎是一件奇怪的事情,但这可能会奏效: #!/bin/bash f=$(mktemp) touch "$f" tail -f "$f" & /usr/bin/xterm -e

例如,我有一个非常简单的脚本,
ping.sh

#!/bin/bash
/usr/bin/xterm -e ping localhost
现在,ping的输出只显示在新的xterm中。我希望在原始终端(ping.sh的stdout)和新的xterm中都显示输出。有办法做到这一点吗


PS:我正在为这个标题苦苦挣扎。

这似乎是一件奇怪的事情,但这可能会奏效:

#!/bin/bash
f=$(mktemp)
touch "$f"
tail -f "$f" &
/usr/bin/xterm -e "sh -c 'ping localhost 2>&1 | tee -a $f'"

或者,可以使用命令
tty
获取连接到标准输入的终端的文件名,然后在新终端中使用
tee
将输出复制到旧终端

/usr/bin/xterm -e "ping localhost | tee $(tty)"
当然,这仅在脚本未使用重定向stdin调用时有效


如果使用重定向的stdin调用脚本,则可以使用中的解决方案
readlink/proc/self/fd/1
,或
ps
(需要一些输出解析)

我同意这很奇怪。我有一个C程序执行ping命令并读取其标准输出。但有时,我希望ping命令在一个新的xterm中执行,这样用户就可以看到,并且仍然可以被C程序读取。