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) 두 개의 동일한 절반(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에서 더 많은 명령을 계속 사용하여 스크립트가 진행됨에 따라 창을 만들고 삭제할 수도 있습니다.

관련 정보