대화 상자 라디오 목록의 변수

대화 상자 라디오 목록의 변수

나는 훌륭하게 작동하는 다음과 같은 대화 방송 목록을 가지고 있습니다.

#!/bin/bash

ch1a="1"
ch1b="Fri, 20/3/15"
ch2a="2"
ch2b="Sun, 21/6/15"
ch1="\"$ch1a\" \"$ch1b\""

dialog --title "Equinoxes and Solistices"  \
--radiolist "When is the Winter Solictice?" 15 60 4 \
"$ch1a" "$ch1b" ON \
"$ch2a" "$ch2b" OFF \
"3" "Wed, 23/9/15" OFF \
'4' 'Mon, 21/12/15' OFF 2>/tmp/menu.sh.$$

"$ch1"그러나 첫 번째 선택기를 or 로 바꾸면 "${ch1[@]}"의 정의가 다르더라도 ch1결과가 나오지 않습니다.

나의 궁극적인 목표는 포함된 모든 선택 항목이 문자열이나 배열인 동적 방송 목록을 만드는 것입니다. 난 이미 시도했어이 솔루션, 그러나 옵션에 공백이 포함되어 있으면 작동하지 않습니다.

답변1

하나가 아닌 두 개의 변수가 필요합니다 --radiolist. 설명된 대로 man dialog:

--radiolist text height width list-height  [ tag item status ] ...
      A  radiolist  box is similar to a menu box.  The only difference is
      that you can indicate which entry is currently selected, by setting 
      its status to on.

위에서 볼 수 있듯이 두 개의 태그가 필요합니다.그리고프로젝트 및 상태. 이것이 바로 하나만 제공하면 실패하는 이유입니다(해당 항목이 배열로 확장된 경우에도).

여전히 배열을 사용할 수 있지만 다음을 수행해야 합니다.

#!/bin/bash

ch=( "1" "Fri, 20/3/15" "2" "Sun, 21/6/15" "3" "Wed, 23/9/15" 
     "4" "Mon, 21/12/15")

dialog --title "Equinoxes and Solistices"  \
--radiolist "When is the Winter Solictice?" 15 60 4 \
"${ch[0]}" "${ch[1]}" ON \
"${ch[2]}" "${ch[3]}" OFF \
"${ch[4]}" "${ch[5]}" OFF \
"${ch[6]}" "${ch[7]}" OFF 2>/tmp/menu.sh.$$

답변2

조금 뒤틀린 케이스를 작업해봤습니다.

Theo가 위에서 요청한 대로 자동 완성 옵션을 반복하는 상황에 있습니다. 쉘 탈출 공간은 까다로울 수 있으므로 이것이 제가 한 일입니다.

local LIST=()                                                                                                                                                                                                                                
for item in *.sh; do
  local DESC="$( grep "DESCRIPTION=" $item | sed 's|^DESCRIPTION=||' )"
  LIST+=( $( basename $item .sh ) "$DESC" off )
done
local script
script=$( dialog --backtitle "NextCloudPi configuration" \
                 --radiolist "Select program to configure and activate:" 20 80 10 \
                 "${LIST[@]}" \
          3>&1 1>&2 2>&3 )
echo "$script was selected"

$DESC일반적으로 공백을 포함하는 쉘 변수로 인해 이 예제가 복잡해집니다. 대화상자 안의 공백 $DESC과 해당 매개변수를 구분하는 공백을 어떻게 구별할 수 있나요?

어쨌든 그러한 문제를 피하는 것이 더 자연스러운 방법이기 때문에 배열을 사용하기로 결정했습니다.

전체 코드와 결과를 볼 수 있습니다

https://ownyourbits.com/2017/03/05/generic-software-installer-for-raspbian/

배열 및 공간 분할에 대한 자세한 내용은 다음을 참조하세요.

http://zsh.sourceforge.net/FAQ/zshfaq03.html

관련 정보