例如,我有一个非常简单的脚本ping.sh
:
#!/bin/bash
/usr/bin/xterm -e ping localhost
现在,ping的输出只显示在新的xterm中。我希望输出显示在原始终端(ping.sh的stdout)以及新的xterm中。有没有办法做到这一点?
PS:我为此争夺冠军。答案 0 :(得分:0)
看起来似乎很奇怪,但这可能有用:
#!/bin/bash
f=$(mktemp)
touch "$f"
tail -f "$f" &
/usr/bin/xterm -e "sh -c 'ping localhost 2>&1 | tee -a $f'"
答案 1 :(得分:0)
或者,可以使用命令tty
获取连接到标准输入的终端的文件名,然后在新终端中使用tee
将输出复制到旧终端。
/usr/bin/xterm -e "ping localhost | tee $(tty)"
当然,这仅在未使用重定向的stdin调用脚本时有效。
如果使用重定向的stdin调用脚本,则可以使用shell - How to get the real name of the controlling terminal? - Unix & Linux Stack Exchange中的解决方案。 readlink /proc/self/fd/1
或ps
(需要一些输出解析)