Olhando para a página de manual para isso, parece haver alguma maneira de evitar passar o texto como um argumento - parece não haver nenhuma maneira de canalizar os dados ou ter dialog
lido diretamente do arquivo. No entanto, você pode limitar o tamanho do argumento usando head
. Na maioria dos sistemas Linux, o tamanho máximo para um único argumento é de 32 KiB, então você poderia fazer:
dialog --max-input 32768 --yesno "$(head -c 32K FILE)" 10 100
O tamanho máximo para um único argumento é definido por MAX_ARG_STRLEN
, que você encontrará em /usr/include/linux/binfmts.h
se tiver cabeçalhos de kernel instalados. Geralmente, o valor é PAGE_SIZE * 32
, em que PAGE_SIZE
é geralmente 1 KiB (consulte /usr/include/linux/a.out.h
).
É claro que esses valores podem ser completamente reconfigurados. Além disso MAX_ARG_STRLEN
é específico do Linux e foi introduzido no Linux 2.6.23. Para mais informações sobre quais são os limites, consulte O que define o tamanho máximo para um único argumento de comando? .
Atualizar
Opa, você pode realmente usar o argumento --file
para isso. Parece que você pode fazer algo como (sem ter testado):
{
echo -n \"
sed 's/"/\"/' FILE
echo -n \"
} | dialog --yesno --file '&1' 10 100
Não há necessidade de sed
se você souber que não há cotações no arquivo. Ou, como alternativa, basta colocar tudo o que você precisa no arquivo (aspas, --yesno
e tudo) e simplesmente fazer:
dialog --file FILE