我想运行任意命令,例如
find / -name "a*"
我想将其输出通过管道传输到对话框。--tailbox 和 --progressbox 可以很好地处理这个问题,但如果输出太多,您只能看到屏幕适合的内容。
我需要能够使用向上/向下箭头和/或 pg up/pg dn 键向上滚动并查看之前的输出。还有其他允许滚动条的选项,但它们似乎都不允许向其进行管道输出。
编辑:我找到了一个旨在执行此操作的示例,但老实说,我不明白它是如何工作的或如何将其转换为find / -name "a*". 请参阅http://mywiki.wooledge.org/BashFAQ/040上的最后一个示例
编辑2:唯一的要求是使用对话框(或类似的东西,允许ncurses,如用于命令行的gui,以及本机gui框,如果X可用的话。
\n\n\n\n
--tailbox并--progressbox处理好这个问题,除非输出太多,您只能看到屏幕适合的内容。
这并不完全正确。A--tailbox允许您左右滚动。但它不允许你上下滚动,这是一个遗憾。
要解决此问题,您可以为 提供--tailbox触发的--extra-button,例如--textbox。--ok-label(然后 \xe2\x80\x9cExit\xe2\x80\x9d 按钮变成 \xe2\x80\x9cOK\xe2\x80\x9d 按钮,因此如果要更改其标题,则必须使用。)
关闭--textbox可以中止或返回到--tailbox。接下来,它返回到--tailbox:
(\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)\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n编辑:我找到了一个旨在执行此操作的示例,但老实说,我不明白它是如何工作的或如何将其转换为
\nfind / -name "a*". 请参阅http://mywiki.wooledge.org/BashFAQ/040上的最后一个示例
非常感谢您参考该示例。最后我明白了--tailboxbg应该如何工作。
但是,与我的方法相反,此示例 \xe2\x80\x9cas is\xe2\x80\x9d 不允许您滚动输出(也不打算这样做)。另外,这里(对话框1.3-20160828)中没有显示任何按钮--tailbox,相比之下,这不太人性化。
它的“工作”方式如下:
\n\n# POSIX\n# you cannot tail a nonexistent file, so always ensure it pre-exists!\n> dialog-tail.log\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\x9c创建一个空文件dialog-tail.log,以便dialog即使尚未写入任何内容,下面也可以显示该文件。\xe2\x80\x9d
{\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 &\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\x9c将数字 1 到 3 写入文件 中dialog-tail.log,每个数字占一行 ( \\n),每秒一个数字 ( sleep 1),并在后台执行此操作 ( &)。\xe2\x80\x9d
在您的情况下,您将替换{ \xe2\x80\xa6 }为find / -name \'a*\'. 您可能还想重定向find\xe2\x80\x99s 标准错误流。
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\nRun 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
wait\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\x9c 在后台的所有子进程退出之前不要执行以下命令(此处:写入文件的进程, 和dialog)。\xe2\x80\x9d (分别为 RTFM)