Bash终端重定向到另一个终端

时间:2011-06-27 19:10:11

标签: linux bash terminal redirect pipe

我有netcat端口监听端口1501,我想将该端口上的接收输入传送到新的终端窗口。我知道这是一个坏主意,因为基本上任何一个端口上的人都可以控制机器,但我想知道是否可以这样做。谁知道怎么做。到目前为止我已经尝试过了。

nc -l 1500 |的xterm 要么 nc -l 1500 | xterm -e“NAMEOFWINDOW”

还试图以简单的方式重定向到gnome-terminal。我能做到

nc -l 1500 | grep“SOMEKEYWORD”成功。

有什么想法吗? -TJ

3 个答案:

答案 0 :(得分:2)

你有两个问题。第一个是xtermgnome-terminal不是提供提示和接受命令的程序 - 它们只是将键盘和屏幕连接到该程序的一种方式,即你的shell(通常是{ {1}})。因此,您希望连接到netcat实际上是/bin/bash

其次,您需要的不仅仅是单向管道,这是您使用bash获得的。如果您使用:

|

那么你只有从用户 nc -l -p 1500 | /bin/bash 的管道 - 他们将能够提供输入,但不会看到任何输出。或者,如果你这样做:

bash

然后相反的情况将适用 - 您将只有一个 来自 /bin/bash | nc -l -p 1500 的用户。用户将看到bash的输出,但无法提供任何输入。

幸运的是,netcat支持为另一个命令创建双向管道(实际上是两个管道)的选项:

bash

这可以做你想要的 - 但请注意nc -l -p 1500 -e /bin/bash 不会显示提示,因为它将以“非交互”模式运行。

哦,还有一件事 - 是的,这是真的坏主意。

答案 1 :(得分:1)

这种方式不可行,因为xterm不接受 stdin 上的输入,它会直接捕获键盘输入。

有两种选择:

  • 在xterm
  • 中使用bash代替xterm:nc -l 1500 | bash
  • 使用xterm s -S选项,但您需要先将netcat附加到伪tty,然后将xterm附加到伪终端

答案 2 :(得分:0)

您可以使用tee将输出重定向到临时文件,然后再将tail --follow=name --retry重定向到另一个终端。

nc -l 1500 | tee /tmp/file.txt

当然:

tail --follow=name --retry /tmp/file.txt

这样,您可以通过cron作业rm -f /tmp/file.txt进行tail而不会中断{{1}}命令。