Whiptailダイアログを定期的に更新できますか?

Whiptailダイアログを定期的に更新できますか?

ダッシュボードを表示するホイップダイアログボックスがあります。

source ../script/includes/tasks

pick_task () {
    local options=(
        "$LOGS_TASK" "Check the logs of a service"
        "$KILL_TASK" "Kills a service"
        "$KILL_ALL_TASK" "Kills all services"
        "$SELECT_TASK" "Allows you to select the services you want to run" 
    )

    local menu_height="${#options[@]}"
    local dialog_height=$((menu_height + 9))
    local dialog_width=80

    result=$(whiptail --title "Dashboard" --menu "What do you want to do?" "$dialog_height" "$dialog_width" "$menu_height" "${options[@]}" 3>&1 1>&2 2>&3)
    echo $result
}

これはうまくいきますが、動的に更新されるこのウィンドウにいくつかの追加情報も表示したいと思います。このダイアログボックスが開いている間に更新できますか?

答え1

同じ端末に2つ以上のコマンドを表示するきちんとした方法は、マルチプレクサを使用することです。tmuxたとえば、次のコマンドが提供されます。

tmux new-session -s mysession 'watch -n 1 date' \
   ';' split-window -v -p 50 -t 0 './myscript'

ターミナルでこれを(縦に、-v)2つの同じ半分(50%、)に分割し、-p 50上半分でコマンドを実行し、watch下半分でスクリプトを実行します。myscript後者は現在のスクリプトに基づいています。簡単なテストを実行してください。

#!/bin/bash
result=$(whiptail --menu text 10 40 3 taga a tagb bb tagc ccc 3>&1 1>&2 2>&3)
tmux kill-session

引用符で囲まれたセミコロン()はシェルではなくシェルの';'引数ですので、注意してください。tmux結果はサブシェルから取得されるため、一時ファイルを介して結果を再度渡す必要があるかもしれません。ただし、tmux でさらに多くのコマンドを使用して、スクリプトが進行するにつれてウィンドウを作成および削除することもできます。

関連情報