--tailboxbg --gauge ダイアログでユーザー入力を取得するにはどうすればいいですか?

--tailboxbg --gauge ダイアログでユーザー入力を取得するにはどうすればいいですか?

macOS マシンで実行するスクリプトがあり、ゲージ バーを表示し、同時にスクリプト自体からの出力を追跡したいと考えています。

現在、このコマンドを使用していますが、うまく機能しています。

#!/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...

これはウィジェットdialogで実行され、ログ ファイルを tail します。そして、ウィジェットにループtailboxbgの出力が表示されます。dfgauge

その後、スクリプト自体の STDOUT と STDERR がログファイルにリダイレクトされます。

これも完璧に動作します。スクリプトは通常どおり実行され、その出力がウィジェットに表示されtailboxbggaugeによって発行されたボリュームの使用済み容量が表示されますdf

唯一の問題は、dialog実際の STDIN (つまり、キーの押下 / ターミナル) にアクセスできなくなったことです。つまり、カーソル キーを使用してウィジェットをスクロールしたりtailboxbgdialog他の方法で操作したりすることはできません。

ページを読んでもman、ウィジェットにパーセンテージ値を取得する他の方法は見つかりません。具体的には、オプションgaugeについて次のように書かれています。--input-fd

   --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).  [...]

もう 1 つのアイデアは、実際の STDIN をエイリアスして、それをtailboxbgviaに渡すことです--input-fd。ただし、次の方法は機能しませんでした (以前の動作と比べて何も変わりません)。

...

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) &

...

--gauge最適な方法は、ページで指定されているとおりに常に STDIN を読み取るのではなく、入力ファイルを指定できるようにすることですmanが、これは動作しません。

それで...「実際の」STDIN (つまり、ユーザー入力) をウィジェットに転送し、同時にループtailboxbgからの出力をウィジェットfdにパイプする方法はありますか?gauge

関連情報