Exibe o arquivo usando o diálogo

2

Eu tenho um arquivo no disco que contém algum texto que eu quero exibir na tela. Você pode fazer assim:

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

No entanto, estou preocupado que, se FILE ficar grande, é provável que ultrapasse os limites de comprimento de comando do shell. Existe alguma outra maneira de realizar essa tarefa?

Eu quero exibir o conteúdo do arquivo para que o usuário possa rolar por ele (se for realmente longo) e, em seguida, selecionar o que fazer a seguir. (Eu rotulei novamente os botões "yes" e "no" para algo mais significativo.) Presumivelmente tentando passar seis páginas de texto pela linha de comando como isso vai quebrar.

    
por MathematicalOrchid 15.04.2014 / 18:13

1 resposta

3

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
    
por 15.04.2014 / 18:41

Tags