我在磁盘上有一个文件,其中包含一些我想在屏幕上显示的文本。你可以这样做:
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 * 32
为PAGE_SIZE
1KiB(请参阅/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