hiptail 명령의 출력에서 ​​배열 만들기

hiptail 명령의 출력에서 ​​배열 만들기

그래서 저는 whiptail명령을 사용하여 사용자에게 시스템에 설치하고 싶은 다양한 항목을 선택할 수 있는 옵션을 제공하려고 합니다. whiptail --checklist다음 명령을 사용합니다 .

name =$(whiptail --title "Tools to install" --checklist 20 78 4 \
"NTP" "NTP setup" OFF\
"Perl" "Perl install" OFF\
"Ruby" "Ruby install" OFF \
"Python" "Python install" OFF 3>&1 1>&2 2>&3)

이제 사용자가 Perl과 Python을 선택하면 "Perl"과 "Python"이 출력됩니다. 내가 찾고 있는 것은 궁극적으로 이 배열을 반복해야 하기 때문에 이러한 출력을 배열로 변환할 수 있는 것입니다. 사용 중인 다음 명령에 대한 입력으로 이러한 출력이 필요합니다.

어떤 도움이나 리더십이라도 크게 감사하겠습니다!

답변1

간단한 경우에는 다음과 같이 할 수 있습니다:

CHOICES=( $(whiptail --title "Tools to install" \
  --checklist "Choose something" 20 78 4 \
  "NTP" "NTP setup" OFF \
  "Perl" "Perl install" OFF \
  "Ruby" "Ruby install" OFF \
  "Python" "Python install" OFF 3>&1 1>&2 2>&3) )

그러나 반환된 값이 whiptail인용되어 있으므로 작동하지 않습니다. 예를 들어 다음 스크립트는 다음과 같습니다.

CHOICES=( $(whiptail --title "Tools to install" \
  --checklist "Choose something" 20 78 4 \
  "NTP" "NTP setup" OFF \
  "Perl" "Perl install" OFF \
  "Ruby" "Ruby install" OFF \
  "Python" "Python install" OFF 3>&1 1>&2 2>&3) )

for choice in "${CHOICES[@]}"; do
    echo "choice: $choice"
done

출력됩니다(Ruby와 Python을 선택한 경우).

choice: "Ruby"
choice: "Python"

값 중 하나에 공백이 포함되어 있으면 충돌이 발생합니다. 예를 들어, 다음과 같이 명령줄을 수정하면:

CHOICES=( $(whiptail --title "Tools to install" \
  --checklist "Choose something" 20 78 4 \
  "NTP Setup" "NTP setup" OFF \
  "Perl install" "Perl install" OFF \
  "Ruby" "Ruby install" OFF \
  "Python Install" "Python install" OFF 3>&1 1>&2 2>&3) )

for choice in "${CHOICES[@]}"; do
    echo "choice: $choice"
done

우리는 다음을 얻었습니다:

choice: "NTP
choice: Setup"
choice: "Perl
choice: install"

위의 두 가지 문제를 해결하기 위해 하나를 추가할 수 있습니다 eval.

eval CHOICES=( $(whiptail --title "Tools to install" \
  --checklist "Choose something" 20 78 4 \
  "NTP Setup" "NTP setup" OFF \
  "Perl install" "Perl install" OFF \
  "Ruby" "Ruby install" OFF \
  "Python Install" "Python install" OFF 3>&1 1>&2 2>&3) )

for choice in "${CHOICES[@]}"; do
    echo "choice: $choice"
done

이전 예제와 동일한 선택이 주어지면 다음이 출력됩니다.

choice: NTP Setup
choice: Perl install

관련 정보