--dialog 스크립트에 명령을 변수로 전달할 수 있습니까?

--dialog 스크립트에 명령을 변수로 전달할 수 있습니까?

현재 YesNoPrompt와 필요한 변수를 사용하여 호출할 수 있는 재사용 가능한 예/아니요 프롬프트로 만들려고 하는 다음 대화 상자 기능이 있습니다.

함수는 다음과 같습니다:

function YesNoPrompt {
    dialog --begin 2 1 --no-shadow --title "$1" --hline "$2" \
        --backtitle "$3" --yes-label $4 --no-label $5 \
        --yesno "$6" 26 38 20>&1 > /dev/tty \
        || exit
    sudo reboot 
}

그리고 호출되었습니다 :

YesNoPrompt "TITLE" "HLINE" "BACKGROUND TEXT" "YES" "NO" "MAIN MESSAGE"

잘 작동하지만 사용자가 하드 코딩된 종료 대신 "예" 또는 "아니요"를 선택하고 현재 기능이 있는 것을 다시 시작하는 경우 어떤 일이 발생하는지 결정하는 옵션을 전달할 수 있기를 원합니다.

이를 수행할 수 있는 방법이 있습니까?

어떤 아이디어라도 크게 감사하겠습니다.

답변1

dialog프로세스가 0이 아닌 종료 상태로 종료되면 다음 함수는 매개변수 7의 명령을 실행합니다. 그렇지 않은 경우 - dialog종료가 성공하면 함수는 매개변수 8의 명령을 실행합니다.

function YesNoPrompt {
    if ! dialog --begin 2 1 --no-shadow --title "$1" --hline "$2" \
        --backtitle "$3" --yes-label "$4" --no-label "$5" \
        --yesno "$6" 26 38 20>&1 > /dev/tty
    then
      eval "$7"
    else
      eval "$8"
    fi
}

||논리를 완전한 문 으로 재작업하겠습니다 if/then/else. 그렇지 않으면 대체 exit( exitOR 제외 return)가 다음 sudo reboot(또는 대체)을 허용할 수 있습니다.반품구현하다. 아마도 당신은 하나 또는 다른 명령을 실행하기를 원할 것입니다. 또한 모든 매개변수를 인용했습니다.

eval여러 단어를 명령으로 전달하려는 경우 sudo reboot필수입니다 (예: ). 이로 인해 eval매개변수가 쉘 해석의 또 다른 라운드를 거치게 되므로 와일드카드나 기타 확장과 같은 항목에 주의해야 합니다.

관련 정보