명령 대체 표현식을 통해 실행될 때 "대화 상자"가 메뉴를 표시하지 않지만 허용은 허용하는 이유는 무엇입니까?

명령 대체 표현식을 통해 실행될 때 "대화 상자"가 메뉴를 표시하지 않지만 허용은 허용하는 이유는 무엇입니까?

bash 쉘 스크립트를 통해 사용자에게 옵션 메뉴를 제공하고 싶습니다. 그런 다음 나중에 나중에 사용할 수 있도록 선택 항목을 환경 변수에 저장해야 합니다.

명령줄에서 실행하는 경우:

dialog \
    --backtitle "Make a choice" \
    --menu "Take a pick" \
    10 40 3 \
    choice1 "First choice" \
    choice2 "Second choice"

그러면 모든 것이 잘 작동합니다. 원하는 메뉴를 얻 choice1거나 choice2다시 인쇄됩니다. 그러나 다음을 실행하면:

SELECTION=$( dialog \
    --backtitle "Make a choice" \
    --menu "Take a pick" \
    10 40 3 \
    choice1 "First choice" \
    choice2 "Second choice" \
)

그러면 더 이상 내가 원하는 대로 작동하지 않습니다.

  • 메뉴가 표시되지 않지만 (내가 아는 한) dialogEnter 키를 누르면 종료됩니다.
  • Enter를 눌러 비표시 메뉴를 종료하면 선택한 레이블이 $SELECTION에 저장되지 않고 터미널에 나타납니다.

2>&1stderr로 인쇄되는 경우를 대비하여 stderr를 stdout으로 리디렉션하는 기능을 추가해 보았습니다 . 지금 유일하게 확실한 영향은아무것도 없다명령 대체 표현식에서 반환또는터미널로 인쇄합니다.

내 시스템에서는 1.1-20120215 dialog입니다 cdialog. 매뉴얼 dialog페이지에는 --menu이것을 언급되어 있습니다.종료 시 선택한 메뉴 항목의 레이블이 대화 상자의 출력에 인쇄됩니다.이것은 위와 비슷한 것과 작동해야 할 것 같지만 나에게는 작동하지 않습니다.

제 생각에는사용자가 사용 가능한 옵션 중에서 선택할 수 있도록 표시되는 메뉴입니다. 사용자가 수락하면 선택한 옵션(예: choice2)의 레이블이 환경 변수 $SELECTION에 저장됩니다. 사용자가 취소하는 경우 명확한 표시가 있어야 합니다(이상적으로 $SELECTION은 정의되지 않았거나 길이가 0인 문자열임).

어떻게 해야 하나요?내가 놓치고 있는 퍼즐 조각은 무엇인가?

dialog선택할 수 있는 멋진 메뉴를 제공하고 이상적으로는 제안된 소프트웨어가 너무 이국적이지 않은 한 대안을 제안하는 솔루션 도 허용됩니다( mainDebian Stable 저장소에서 가용성이 필요함).

답변1

다음 --stdout옵션을 사용해 보세요.

$ SELECTION=$( dialog --stdout \
    --backtitle "Make a choice" \
    --menu "Take a pick" \
    10 40 3 \
    choice1 "First choice" \
    choice2 "Second choice" \
)

관련 정보