대화 상자에서 목록 선택 항목을 변수의 별도 줄에 강제로 작성하는 방법

대화 상자에서 목록 선택 항목을 변수의 별도 줄에 강제로 작성하는 방법

아래 코드를 사용하여 사용자가 설치할 소프트웨어를 선택할 수 있는 메뉴를 제공하고 있습니다. 그런 다음 이러한 선택 사항을 함수 호출로 사용하여 설치를 수행하려고 합니다.

OPTIONS=$(dialog --no-tags --clear --backtitle "Installer Options..." --title "Software Selection" \
    --checklist "Use SPACE to select/deselct options and OK when finished."  30 100 30 \
       install_software_a "Install software A" off \
       install_software_b "Install software B" off \
       install_software_c "Install software C" off 2>&1 > /dev/tty)
$OPTIONS

이 코드는 선택 항목을 캡처하는 데 효과적입니다. 내가 겪고 있는 문제는 다음과 같이 처음 두 줄을 선택한 경우 선택 항목을 한 줄에 쓴다는 것입니다.

install_software_a install_software_b

$OPTIONS가 호출되면 처음 선택한 소프트웨어만 설치됩니다. OPTIONS 변수의 형식을 지정하여 다음과 같이 별도의 줄에 선택 항목을 작성할 수 있는 방법이 있습니까?

install_software_a
install_software_b

티아!

남자

답변1

awk다중 문자 레코드 구분 기호(작동하는 최신 구현)를 지원하는 버전이 있는 경우 awk다음 호출을 사용하여 데이터를 바꿀 수 있습니다.

echo "$options" | awk -v RS="[ \n]" '1'

답변2

옵션을 사용하여 출력을 파일로 리디렉션한 --stdout다음 cat해당 파일을 사용할 수 있습니다.

dialog --stdout --no-tags --clear --backtitle "Installer Options..." --title "Software Selection" \
    --checklist "Use SPACE to select/deselct options and OK when finished."  30 100 30 \
       install_software_a "Install software A" off \
       install_software_b "Install software B" off \
       install_software_c "Install software C" off \
 > file

OPTIONS=$(cat file | tr -s ' ' '\n')

echo "${OPTIONS[@]}"

install_software_a
install_software_b

답변3

사용--separate-output대화 상자 옵션(예:--checklist옵션). 내부에매뉴얼 페이지:

--separate-output
일부 위젯의 경우(빌드 목록,체크리스트,트리 뷰), 결과를 따옴표 없이 한 번에 한 줄씩 출력합니다. 이는 다른 프로그램의 구문 분석을 용이하게 합니다.

관련 정보