Como obter a entrada do usuário na caixa de diálogo --tailboxbg --gauge?

Como obter a entrada do usuário na caixa de diálogo --tailboxbg --gauge?

Eu tenho um script que executo em uma máquina macOS, onde desejo mostrar uma barra de medidor e acompanhar a saída do próprio script ao mesmo tempo.

Atualmente uso este comando e funciona bem:

#!/bin/bash

TERMINAL_COLS=$(tput cols)
TERMINAL_ROWS=$(tput lines)

(while true ; do
     df /Volumes/Backup/ | tail -1 | awk '{print int($3/($3+$4)*100)}'
     sleep 1
 done | dialog --no-shadow --begin 7 0 \
               --tailboxbg /tmp/backup.log $(( $TERMINAL_ROWS - 7 )) $TERMINAL_COLS \
               --and-widget --begin 0 0 \
               --gauge 'Backup volume usage' 7 $TERMINAL_COLS) &

exec >> /tmp/backup.log
exec 2>&1

...rest of script...

Isso é executado dialogcom um tailboxbgwidget, que segue um arquivo de log. E mostra a saída do dfloop em um gaugewidget.

Posteriormente, o STDOUT e STDERR do próprio script são redirecionados para o arquivo de log.

Novamente, isso funciona perfeitamente bem: o script é executado normalmente, sua saída é exibida no tailboxbgwidget e gaugemostra a capacidade usada do volume emitida por df.

O único problema é que dialogagora não há mais acesso ao STDIN real (ou seja, pressionamentos de teclas/terminal). Isso significa que não posso usar as teclas do cursor para rolar pelo tailboxbgwidget ou interagir dialogde qualquer outra forma.

Lendo a manpágina, não vejo gaugeoutra forma de obter os valores percentuais para o widget. Especificamente, diz para a --input-fdopção:

   --input-fd fd
          Read keyboard input from the given file descriptor.  Most dialog
          scripts read from the standard input, but the gauge widget reads
          a pipe (which is always standard input).  [...]

Outra ideia seria apelidar o STDIN real e entregá-lo ao tailboxbgvia --input-fd. O seguinte não funcionou (nada mudou em comparação com o comportamento anterior):

...

exec 5<&0

(while true ; do
     df /Volumes/Backup/ | tail -1 | awk '{print int($3/($3+$4)*100)}'
     sleep 1
 done | dialog --input-fd 5 --no-shadow --begin 7 0 --tailboxbg /tmp/backup.log $(( $TERMINAL_ROWS - 7 )) $TERMINAL_COLS --and-widget --begin 0 0 --gauge 'Backup volume usage' 7 $TERMINAL_COLS) &

...

O ideal seria --gaugeespecificar um arquivo de entrada em vez de sempre ler STDIN conforme especificado na manpágina, mas não é assim que funciona.

Então... existe uma maneira de encaminhar o STDIN "real" (ou seja, entrada do usuário) para o tailboxbgwidget, mas ainda canalizar a saída do fdloop para o gaugewidget ao mesmo tempo?

informação relacionada