我基本上想做的是 的新窗口版本less
。很久以前有一个名为 的工具gless
可以做到这一点。例如
cat my_very_long_file | gless
将打开一个新窗口并运行一个less
类似寻呼机的程序,显示我的很长的文件;我启动命令的终端将保持干净。
gless
在较新的系统中不可用。我发现最接近的替代方案是gview -
(实际上gvim
是在只读模式下,读取标准输入)但这不是确切的做法;它会在显示任何内容之前读取整个标准输入,因此不适合大量输入。
我考虑运行一个新终端(xterm
或konsole
任何其他命令)作为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)