1行でbashスクリプトメニューを実行する方法

1行で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

おすすめ記事