如何打开一个新终端,在该终端中执行一个进程并通过管道传输到该进程?

如何打开一个新终端,在该终端中执行一个进程并通过管道传输到该进程?

我基本上想做的是 的新窗口版本less。很久以前有一个名为 的工具gless可以做到这一点。例如

cat my_very_long_file | gless

将打开一个新窗口并运行一个less类似寻呼机的程序,显示我的很长的文件;我启动命令的终端将保持干净。

gless在较新的系统中不可用。我发现最接近的替代方案是gview -(实际上gvim是在只读模式下,读取标准输入)但这不是确切的做法;它会在显示任何内容之前读取整个标准输入,因此不适合大量输入。

我考虑运行一个新终端(xtermkonsole任何其他命令)作为less初始命令。但它没有按我想要的方式工作;我想做类似的事情

cat my_very_long_file | xterm -e less

但是 xterm 和所有其他终端似乎没有将它们的标准输入传递给它们运行的​​进程 - 新窗口打开,但立即消失。

(我知道我可以在新终端中启动命令;但这不是我想要的。我真正想在当前 shell 中运行命令并重定向到新进程。cat这只是一个例子。)

作为对任何建议方法的测试,请将其视为测试用例:

od -a /dev/random | <whatever-solution>

使用替代的解决方案,这应该会创建一个带有寻呼机(或任何其他程序)的新窗口,该寻呼机接收无限的随机文本流。

(后期添加)我正在寻找一种简单的解决方案,既能保持管道到寻呼机的精神。多步骤解决方案可以工作,但不自然。有一个命令行也可以工作:xterm -e 'whatever | less',我有时会使用它,但对我来说不自然。

答案1

命名管道怎么样?

mkfifo /tmp/test.fifo
od -a /dev/urandom > /tmp/test.fifo

在新窗口中:

cat /tmp/test.fifo | less

或者:

gnome-terminal -e "bash -c 'cat /tmp/test.fifo | less'"

答案2

尝试将此功能添加到您的 ~/.bashrc:

gless() { gnome-terminal -e "less $*" & }

这将在后台启动终端,释放您的控制台。它还将所有参数传递给 less 命令(例如 gless -S test.txt)

相关内容