首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用对话框显示文件

问使用对话框显示文件
EN

Unix & Linux用户
提问于 2014-04-15 16:13:06
回答 1查看 3.6K关注 0票数 2

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

代码语言:javascript
复制
dialog --yesno "`cat FILE`" 10 100

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

我希望显示文件的内容,以便用户可以滚动它(如果它真的很长),然后选择下一步要做什么。(我把“是”和“不”按钮重新贴上了更有意义的标签。)想必,尝试通过这样的命令行传输六页文本将会中断。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2014-04-15 16:41:00

从手册页面上看,似乎有任何方法可以避免将文本作为参数传递--似乎无法从文件中直接读取数据或读取dialog。但是,可以使用head限制参数的大小。在大多数Linux系统中,单个参数的最大大小是32KiB,因此您可以这样做:

代码语言:javascript
复制
dialog --max-input 32768 --yesno "$(head -c 32K FILE)" 10 100

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

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

更新

哦,您实际上可以使用--file参数来实现这一点。看起来,您可以做类似的事情(无需测试):

代码语言:javascript
复制
{
  echo -n \"
  sed 's/"/\"/' FILE
  echo -n \"
} | dialog --yesno --file '&1' 10 100

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

代码语言:javascript
复制
dialog --file FILE
票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/124923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档