管道命令的输出到对话框并允许向上滚动

sen*_*ile 5 bash

我想运行任意命令,例如 find / -name "a*" 我想将其输出通过管道传输到对话框。--tailbox 和 --progressbox 可以很好地处理这个问题,但如果输出太多,您只能看到屏幕适合的内容。

我需要能够使用向上/向下箭头和/或 pg up/pg dn 键向上滚动并查看之前的输出。还有其他允许滚动条的选项,但它们似乎都不允许向其进行管道输出。

编辑:我找到了一个旨在执行此操作的示例,但老实说,我不明白它是如何工作的或如何将其转换为find / -name "a*". 请参阅http://mywiki.wooledge.org/BashFAQ/040上的最后一个示例

编辑2:唯一的要求是使用对话框(或类似的东西,允许ncurses,如用于命令行的gui,以及本机gui框,如果X可用的话。

Poi*_*ars 3

\n

--tailbox--progressbox处理好这个问题,除非输出太多,您只能看到屏幕适合的内容。

\n
\n\n

这并不完全正确。A--tailbox允许您左右滚动。但它不允许你上下滚动,这是一个遗憾。

\n\n

要解决此问题,您可以为 提供--tailbox触发的--extra-button,例如--textbox--ok-label(然后 \xe2\x80\x9cExit\xe2\x80\x9d 按钮变成 \xe2\x80\x9cOK\xe2\x80\x9d 按钮,因此如果要更改其标题,则必须使用。)

\n\n

关闭--textbox可以中止或返回到--tailbox。接下来,它返回到--tailbox

\n\n
(\n  log=/tmp/make-kernel.log\n\n  # start process that writes to "$log" here\n\n  exit_status=1\n\n  while [ $exit_status -ne 0 ]\n  do\n    dialog \\\n      --ok-label Close \\\n      --extra-button --extra-label Inspect \\\n      --tailbox "$log" 21 80\n\n    exit_status=$?\n\n    if [ $exit_status -eq 255 ]; then\n      dialog --textbox "$log" 21 80\n    fi\n  done\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

编辑:我找到了一个旨在执行此操作的示例,但老实说,我不明白它是如何工作的或如何将其转换为find / -name "a*". 请参阅http://mywiki.wooledge.org/BashFAQ/040上的最后一个示例

\n
\n\n

非常感谢您参考该示例。最后我明白了--tailboxbg应该如何工作。

\n\n

但是,与我的方法相反,此示例 \xe2\x80\x9cas is\xe2\x80\x9d 不允许滚动输出(也不打算这样做)。另外,这里(对话框1.3-20160828)中没有显示任何按钮--tailbox,相比之下,这不太人性化。

\n\n

它的“工作”方式如下:

\n\n
# POSIX\n# you cannot tail a nonexistent file, so always ensure it pre-exists!\n> dialog-tail.log\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\x9c创建一个空文件dialog-tail.log,以便dialog即使尚未写入任何内容,下面也可以显示该文件。\xe2\x80\x9d

\n\n
{\n    for i in 1 2 3; do \n        printf \'%d\\n\' "$i"\n        sleep 1\n    done\n\n    printf \'Done\\n\'\n} > dialog-tail.log &\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\x9c将数字 1 到 3 写入文件 中dialog-tail.log,每个数字占一行 ( \\n),每秒一个数字 ( sleep 1),并在后台执行此操作 ( &)。\xe2\x80\x9d

\n\n

在您的情况下,您将替换{ \xe2\x80\xa6 }find / -name \'a*\'. 您可能还想重定向find\xe2\x80\x99s 标准错误流。

\n\n
dialog --title "TAIL BOXES" \\\n       --begin 10 10 --tailboxbg dialog-tail.log 8 58 \\\n       --and-widget \\\n       --begin 3 10 --msgbox "Press OK " 5 30\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\x9c 在第 10 行第 10 列的框中显示文件,标题为 \xe2\x80\x98TAIL BOXES\xe2\x80\x99,就像tail(1) 中那样,但在后台运行该框(--tailboxbg而不是--tailbox),以便--and-widget可以从第 3 行第 10 列开始立即显示附加小部件 ( )(--begin 3 10; 位于尾框上方)。该小部件的--msgbox文本为 \xe2\x80\x98Press OK \xe2\x80\x99,高度为 5,宽度为 30。\xe2\x80\x9d

\n\n
wait\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\x9c 在后台的所有子进程退出之前不要执行以下命令(此处:写入文件的进程, 和dialog)。\xe2\x80\x9d (分别为 RTFM)

\n