Как написать сценарий меню bash, чтобы опции были содержимым списка?

Из комментариев видно, что файл x.fileменьше 32768 байт (32 КиБ ). Это означает, что когда ddпопросят записать 32 КиБ в /dev/vv/, он не сможет скопировать все это из файла, и последний бит из 32 КиБ останется незаписанным.

Эти неинициализированные данные затем будут скопированы в y.fileс помощью второй операции dd, и это то, что вы видите, когда открываете этот файл в редакторе.

^@— это способ отображения нулевого байта в редакторе. Из чтения руководства ddмне неясно, то ли это то, что было записано в устройство первым dd, или это ненужные данные, которые уже присутствовали на устройстве до первого вызова dd.

0
21.03.2020, 10:35
2 ответа

Можно заменить

options=("Option 1" "Option 2" "Option 3" "Quit")

с

mapfile -t options < list.txt
options+=( "Quit" )

и настройте паттерны case. Вместо проверки содержимого переменной $optвы можете использовать $REPLY, которая содержит выбранное число и ее легче проверить.

1
28.04.2021, 23:19

Считать файл в массив:

#!/usr/bin/env bash

readarray -t list < list.txt

PS3='Please enter your choice or 0 to exit: '
select selection in "${list[@]}"; do
    if [[ $REPLY == "0" ]]; then
        echo 'Goodbye' >&2
        exit
    else
       echo $REPLY $selection
        break
    fi
done
0
28.04.2021, 23:19

Теги

Похожие вопросы