使用对话框显示文件

使用对话框显示文件

我在磁盘上有一个文件,其中包含一些我想在屏幕上显示的文本。你可以这样做:

dialog --yesno "`cat FILE`" 10 100

但是,我担心如果FILE变大,我很可能会超出 shell 的命令长度限制。还有其他方法可以完成这项任务吗?

我想显示文件的内容,以便用户可以滚动它(如果它是真的长),然后选择下一步要执行的操作。 (我已将“是”和“否”按钮重新标记为更有意义的内容。)大概尝试像这样通过命令行传输六页文本将会失败。

答案1

查看此手册页,似乎确实有任何方法可以避免将文本作为参数传递 - 似乎无法通过管道输入数据或dialog直接从文件中读取数据。但是,您可以使用 限制参数的大小head。在大多数 Linux 系统上,单个参数的最大大小为 32KiB,因此您可以执行以下操作:

dialog --max-input 32768 --yesno "$(head -c 32K FILE)" 10 100

单个参数的最大大小是定义的,如果安装了内核头文件,MAX_ARG_STRLEN您可以在其中找到。/usr/include/linux/binfmts.h通常该值通常PAGE_SIZE * 32PAGE_SIZE1KiB(请参阅/usr/include/linux/a.out.h)。

当然,这些值可以完全重新配置。此外,它MAX_ARG_STRLEN是 Linux 特有的,并在 Linux 2.6.23 中引入。有关实际限制的更多信息,请参阅什么定义了命令单个参数的最大大小?

更新

哎呀,你实际上可以使用这个--file论点。看起来你可以做类似的事情(未经测试):

{
  echo -n \"
  sed 's/"/\"/' FILE
  echo -n \"
} | dialog --yesno --file '&1' 10 100

sed如果您知道文件中没有引号,则不需要。或者,只需将您需要的所有内容放入文件中(引号--yesno等),然后只需执行以下操作:

dialog --file FILE

相关内容