【问题标题】:Redirect new xterm's output back to the original terminal将新 xterm 的输出重定向回原来的终端
【发布时间】:2014-01-15 20:11:06
【问题描述】:

比如我有一个很简单的脚本,ping.sh:

#!/bin/bash
/usr/bin/xterm -e ping localhost

目前,ping 的输出只显示在新的 xterm 中。我希望输出显示在原始终端(ping.sh 的标准输出)以及新的 xterm 中。有没有办法做到这一点?

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

【问题讨论】:

标签: linux bash xterm


【解决方案1】:

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

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

【讨论】:

  • 我同意这很奇怪。我有一个 C 程序执行 ping 命令并读取它的标准输出。但有时,我希望 ping 命令在新的 xterm 中执行,以便用户可以看到,并且仍然可以被 C 程序读取。
【解决方案2】:

或者,可以使用命令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(需要一些输出解析)

【讨论】:

    猜你喜欢
    • 2021-01-27
    • 2019-03-20
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 2017-12-01
    • 2014-07-05
    相关资源
    最近更新 更多