한 줄로 bash 스크립트 메뉴를 실행하는 방법

한 줄로 bash 스크립트 메뉴를 실행하는 방법

스크립트(#!/bin/bash)에서 메뉴를 만들고 있는데 필요한 대로 작동합니다.

PS3='[ menu ] choose partition tool:'
options=("fdisk" "cfdisk" "continue")
select opt in "${options[@]}"
do
    case $opt in
        "fdisk")
            fdisk /dev/sda
            ;; 
        "cfdisk")
            cfdisk
            ;;
        "continue")
            break
            ;;
        *) echo "invalid option $REPLY"
            ;;
    esac
done

화면에 나타난 결과는 다음과 같습니다.

1) fdisk
2) cfdisk
3) continue
[ menu ] choose partition tool: 

레이아웃(?)을 다음과 같이 변경하려면 어떻게 해야 합니까?

[ menu ] choose partition tool (1) fdisk (2) cfdisk (3) continue:

간단히 말해서 PS3=에 옵션을 작성하는 것만으로도 충분하다는 것을 알고 있습니다.PS3='[메뉴] 계속하려면 파티션 도구(1) fdisk(2) cfdisk(3)를 선택하세요:'그런데 (설명에서) 옵션 목록을 표시하지 않는 방법을 알고 싶습니다.

답변1

사용자 정의 버전에 대한 코드를 작성해야 합니다 select. 다음과 같이 작동할 수 있습니다.

#!/bin/bash
#
PS3='[ menu ] choose partition tool:'
options=('fdisk' 'cfdisk' 'continue')

while :
do
    printf '%s' "$PS3"
    for ((i = 0; i < ${#options[@]}; i++))
    do
        printf ' (%d) %s' $((i+1)) "${options[i]}"
    done
    read -p ': ' opt

    case "$opt" in
        1|"fdisk")
            fdisk /dev/sda
            ;;
        2|"cfdisk")
            cfdisk
            ;;
        3|"continue")
            break
            ;;
        *) echo "invalid option $opt"
            ;;
    esac
done

관련 정보