【发布时间】:2014-01-15 20:11:06
【问题描述】:
比如我有一个很简单的脚本,ping.sh:
#!/bin/bash
/usr/bin/xterm -e ping localhost
目前,ping 的输出只显示在新的 xterm 中。我希望输出显示在原始终端(ping.sh 的标准输出)以及新的 xterm 中。有没有办法做到这一点?
PS:我正在为这个标题而苦苦挣扎。
【问题讨论】:
比如我有一个很简单的脚本,ping.sh:
#!/bin/bash
/usr/bin/xterm -e ping localhost
目前,ping 的输出只显示在新的 xterm 中。我希望输出显示在原始终端(ping.sh 的标准输出)以及新的 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)"
当然,这仅适用于不使用重定向标准输入调用脚本的情况。
如果使用重定向的标准输入调用脚本,可以使用shell - How to get the real name of the controlling terminal? - Unix & Linux Stack Exchange 中的解决方案。 readlink /proc/self/fd/1,或ps(需要一些输出解析)
【讨论】: