Wie erhalte ich Benutzereingaben im Dialog --tailboxbg --gauge?

Wie erhalte ich Benutzereingaben im Dialog --tailboxbg --gauge?

Ich habe ein Skript, das ich auf einem macOS-Computer ausführe, wo ich eine Messleiste anzeigen und gleichzeitig die Ausgabe des Skripts selbst verfolgen möchte.

Ich verwende derzeit diesen Befehl und er funktioniert gut:

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

Dies wird dialogmit einem tailboxbgWidget ausgeführt, das eine Protokolldatei erstellt. Und es zeigt die Ausgabe der dfSchleife in einem gaugeWidget an.

Anschließend werden STDOUT und STDERR des Skripts selbst in die Protokolldatei umgeleitet.

Auch dies funktioniert einwandfrei: Das Skript wird wie gewohnt ausgeführt, seine Ausgabe wird im tailboxbgWidget angezeigt und gaugedie verwendete Kapazität des Datenträgers wird wie von ausgegeben angezeigt df.

Das einzige Problem ist, dass dialogich jetzt keinen Zugriff mehr auf die echte STDIN (also Tastendrücke/Terminal) habe. Das bedeutet, dass ich die Cursortasten nicht mehr verwenden kann, um durch das tailboxbgWidget zu scrollen oder dialogauf andere Weise damit zu interagieren.

Beim Lesen der manSeite sehe ich keine Möglichkeit, die Prozentwerte gaugeauf andere Weise in das Widget zu übertragen. Konkret heißt es für die --input-fdOption:

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

Eine andere Idee wäre, den echten STDIN-Code zu aliasen und ihn an tailboxbgvia weiterzugeben --input-fd. Folgendes hat allerdings nicht funktioniert (im Vergleich zum vorherigen Verhalten hat sich nichts geändert):

...

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

...

Optimal wäre es, wenn --gaugeman eine Eingabedatei angeben könnte, anstatt immer STDIN wie auf der manSeite angegeben zu lesen, aber so funktioniert es nicht.

Gibt es also eine Möglichkeit, die „echte“ STDIN (also die Benutzereingabe) an das Widget weiterzuleiten und gleichzeitig tailboxbgdie Ausgabe der fdSchleife an das Widget weiterzuleiten?gauge

verwandte Informationen