我正在编写一个shell脚本,我想在脚本中编写命令,但将输出重定向到其他konsole会话。(使用kde)
我正在编写一个shell脚本,我想在脚本中编写命令,但将输出重定向到其他konsole会话。(使用kde)
Answers:
首先,查找标识当前tty会话的编号; 让我们将数字视为X
:
| terminal 1 | terminal 2 |
------------------------------------------------------
| $ tty | $ |
| /dev/pts/X | |
然后,使用给定的数字写入所选的tty:
| terminal 1 | terminal 2 |
------------------------------------------------------
| $ tty | $ echo "foo" > /dev/pts/X |
| /dev/pts/X | |
它会产生:
| terminal 1 | terminal 2 |
------------------------------------------------------
| $ tty | $ echo "foo" > /dev/pts/X |
| /dev/pts/X | |
| foo | |
迟到但也许更好然后永远...... :-)
mkfifo ~/MyOutput # Create the FIFO (Special file)
./MyScript.sh > ~/MyOutput # In the terminal/console 1
cat ~/MyOutput # In another tty/console
来自info coreutils 'mkfifo invocation'
:
“FIFO”是一种允许独立进程进行通信的特殊文件类型。一个进程打开FIFO文件进行写入,另一个进程用于读取,之后数据可以像shell中或通常的匿名管道一样流动。
附注:
FIFO
对于同一个进程,您可以拥有多个进程(std out,std err)。FIFOs
它的转储将保留所有输出。cat MyOutput >> NewRealFile
cat MyOutput
从其他终端使用!FIFOs
的流量将被合并(没有先验的方法来区分该行来自哪个程序)。使用tty
每个终端中的命令来识别它们:
$ tty
/dev/pts/0
$ tty
/dev/pts/1
假设这些TTY,要将第一个stdout重定向到第二个,请在第一个终端中运行:
exec 1>/dev/pts/1
注意:现在每个命令输出都将显示在pts / 1上
要恢复pts / 0的默认行为stdout:
exec 1>/dev/pts/0
有关演示,请参阅此视频。