--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과 함께 실행됩니다. 그리고 위젯 에 루프 tailboxbg의 출력이 표시됩니다 .dfgauge

그런 다음 스크립트 자체의 STDOUT 및 STDERR이 로그 파일로 리디렉션됩니다.

다시 말하지만, 이것은 완벽하게 작동합니다. 스크립트는 평소대로 실행되고 해당 출력은 tailboxbg위젯에 표시되며 는 gauge에서 내보낸 볼륨의 사용된 용량을 보여줍니다 df.

유일한 문제는 dialog이제 더 이상 실제 STDIN(예: 키 누르기/터미널)에 액세스할 수 없다는 것입니다. 이는 커서 키를 사용하여 tailboxbg위젯을 스크롤하거나 dialog다른 방식으로 상호 작용할 수 없음을 의미합니다 .

페이지 를 읽어보니 다른 방법으로 위젯 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).  [...]

또 다른 아이디어는 실제 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

관련 정보