--tailbox
and--progressbox
handle this well, except that if the output becomes too much, you can only see as much as the screen fits.
Isso não está totalmente correto. Um --tailbox
permite rolar para a esquerda e para a direita. Mas não permite rolar para cima e para baixo, o que é uma pena.
Para contornar isso, você pode fornecer o --tailbox
com um --extra-button
que é acionado, por exemplo, um --textbox
. (Então o botão “Sair” se torna um botão “OK”, então você tem que usar --ok-label
se você quiser mudar sua legenda.)
Fechar o --textbox
pode anular ou retornar ao --tailbox
. A seguir, ele retorna para o --tailbox
:
(
log=/tmp/make-kernel.log
# start process that writes to "$log" here
exit_status=1
while [ $exit_status -ne 0 ]
do
dialog \
--ok-label Close \
--extra-button --extra-label Inspect \
--tailbox "$log" 21 80
exit_status=$?
if [ $exit_status -eq 255 ]; then
dialog --textbox "$log" 21 80
fi
done
)
Edit: I have found an example that purports to do this, but I honestly don't understand how it works or how to translate it to the example of
find / -name "a*"
. see the last example on http://mywiki.wooledge.org/BashFAQ/040
Muito obrigado por se referir a esse exemplo. Por fim, entendo como o --tailboxbg
deve funcionar.
No entanto, em contraste com a minha abordagem, este exemplo “como está” não permitirá que você role a saída (nem pretende fazer isso). Além disso, aqui (diálogo 1.3-20160828), nenhum botão é exibido no --tailbox
, que por comparação não é amigável ao usuário.
A maneira como "funciona" é a seguinte:
# POSIX
# you cannot tail a nonexistent file, so always ensure it pre-exists!
> dialog-tail.log
"Crie um arquivo vazio dialog-tail.log
para que o dialog
abaixo possa exibir o arquivo mesmo que nada tenha sido gravado nele ainda."
{
for i in 1 2 3; do
printf '%d\n' "$i"
sleep 1
done
printf 'Done\n'
} > dialog-tail.log &
“Escreva os números de 1 a 3 no arquivo dialog-tail.log
, cada um em sua própria linha ( \n
), um número por segundo ( sleep 1
) e faça isso em segundo plano ( &
) . "
No seu caso, você deve substituir { … }
por find / -name 'a*'
. Você também pode redirecionar o fluxo de erro padrão de find
.
dialog --title "TAIL BOXES" \
--begin 10 10 --tailboxbg dialog-tail.log 8 58 \
--and-widget \
--begin 3 10 --msgbox "Press OK " 5 30
“Exiba o arquivo em uma caixa na linha 10, coluna 10, com o título 'TAIL BOXES' como se fosse tail
(1), mas execute essa caixa em segundo plano ( --tailboxbg
em vez de --tailbox
) , para que um widget adicional ( --and-widget
) possa ser exibido imediatamente a partir da linha 3, coluna 10 ( --begin 3 10
; acima da caixa de cauda). Esse widget é um --msgbox
com o texto "Pressione OK", altura 5 e largura 30 ".
wait
“Não execute os seguintes comandos até que todos os processos-filhos em segundo plano tenham saído (aqui: o processo que grava no arquivo e dialog
).” (RTFM, respectivamente)