아래 코드를 사용하여 사용자가 설치할 소프트웨어를 선택할 수 있는 메뉴를 제공하고 있습니다. 그런 다음 이러한 선택 사항을 함수 호출로 사용하여 설치를 수행하려고 합니다.
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
일부 위젯의 경우(빌드 목록,체크리스트,트리 뷰), 결과를 따옴표 없이 한 번에 한 줄씩 출력합니다. 이는 다른 프로그램의 구문 분석을 용이하게 합니다.