Question

For example, I have a very simple script, ping.sh:

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

Right now, the output of the ping only shows up in the new xterm. I would like the output to show in both the original terminal (stdout of ping.sh) as well as in the new xterm. Is there a way to do this?

PS: I'm struggling with a title for this.

Was it helpful?

Solution

Seems like a weird thing to do, but this might work:

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

OTHER TIPS

Alternatively, it's possible to get the file name of the terminal connected to standard input using the command tty, then use tee in the new terminal to copy the output to the old terminal.

/usr/bin/xterm -e "ping localhost | tee $(tty)"

Of course, this only works if the script is not called with redirected stdin.

In case the script is called with redirected stdin, solutions in shell - How to get the real name of the controlling terminal? - Unix & Linux Stack Exchange can be used. readlink /proc/self/fd/1, or ps (require some output parsing)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top