사용자 친화적인 메뉴를 표시하고 싶습니다 whiptail
.
내 목표 whiptail
는 다음과 같습니다
Choice1
Choice2
Choice3
Choice4
내 배열에는 다음이 포함됩니다.
Choice1 Choice2 Choice3 Choice4
다음과 같은 루프를 통해 배열을 실행하고 있습니다.
for value in ${value[@]}
do
echo "$value"
done
whiptail
메뉴가 4개 더 생겨서 내부 에코를 추가할 수 없습니다 .
나는 다음과 같은 스크립트를 시도했습니다.
$val=$(whiptail --title "xx" --menu "choose" 16 78 10
for value in ${value[@]}
do
echo "$value"
done
3>&1 1>&2 2>&3)
위에서 언급한 스크립트를 실행한 후 내 쉘이 끔찍해 보입니다.
스크립트 후 쉘:
누구든지 내 문제를 해결할 수 있나요?
답변1
스크립트에 몇 가지 오류가 있습니다. 예를 들어 루프 반복자에 배열 자체와 동일한 이름을 지정하면 안 됩니다. 그러나 이를 수행하기 위해 루프가 필요하지 않습니다. 특수 배열 인덱스를 사용하여 모든 배열 요소를 한 번에 넣기만 하면 됩니다 @
.
value=(Choice1 "" Choice2 "" Choice3 "" Choice4 "")
whiptail --title "xx" --menu "choose" 16 78 10 "${value[@]}"
따옴표 안의 빈 문자열에 유의하세요 ""
. 이는 메뉴 옵션에 대한 필수 설명이며 , 이 문자열이 없으면 설명으로 처리 whiptail
됩니다 .Choice
Choice4
Choice1 Choice2
Choice3 Choice4
당신이 원하는 것이 아닐 수도 있습니다.
답변2
체크박스 메뉴가 필요한 경우:
checkboxes ()
{
local -A checkboxes;
checkboxes["foo"]=off;
checkboxes["bar"]=on;
checkboxes["eric"]=on;
backtitle="Backtitle";
title="Title";
question="Please choose:";
choices=();
for key in "${!checkboxes[@]}";
do
choices+=("$key" "" "${checkboxes[$key]}");
done;
result=$(
whiptail --backtitle "$backtitle" \
--title "$title" \
--checklist "$text" \
0 0 0 "${choices[@]}" \
3>&2 2>&1 1>&3-
);
echo "$result"
}