Создать числовой список выбора

После БОЛЬШОГО исследования я обнаружил, что это была неправильная конфигурация в настройках рабочего стола Gnome моей главной машины. У меня была включена функция, которая перехватывала мои клавиши управления (влево и вправо) и отображала своего рода анимированный «бычий глаз» на курсоре при нажатии любой из них. Проблема с этой функцией доступности в том, что она не передает ключ управления никаким программам.

The solution was to turn it off.  To do so from Linux Mint 13 Maya (MATE) do the following:
1 - Click on the Menu button on the lower left corner of the screen.
2 - Click on Preferences
3 - Click on Assistive Technologies
4 - Click on Mouse Accessibility
5 - Click on the General tab
6 - Under Locate Pointer, uncheck the box that says "Show position of pointer when the Control key is pressed".

Я прилагаю снимок экрана со всеми отображаемыми меню и соответствующим флажком, обведенным красным. enter image description here

-3
05.02.2019, 23:23
2 ответа

Обычно мы не делаем здесь запросы на скрипты, но я помогу вам с трудным моментом.

Предполагая оболочку с функциональностью select(, такой какbash). Это должно помочь вам начать:

#!/bin/bash

PS3='Select choice: '
select ch in "dog" "cat" "lion" "bear"; do
    case $REPLY in
        [1-4]) break ;;
            *) echo 'Try again' >&2
    esac
done

printf 'You chose a %s\n' "$ch"

selectв bashотобразит меню и подсказку. Подсказка задается значением переменной PS3.

Оператор selectпредставляет собой цикл, и в каждой итерации пользователь делает выбор. Выбор номер(или что-то еще, что пользователь вводит ), находится в $REPLY, а фактический пункт меню находится в переменной, указанной в операторе select(, здесь это$ch).

Оператор caseв цикле проверяет, был ли дан допустимый ответ. Если так (, то есть $REPLYбыло одной цифрой от 1 до 4 ), мы breakвышли из цикла. Если пользователь ввел что-либо еще, выводится короткое сообщение об ошибке, и цикл выполняет следующую итерацию.

Если у вас есть более 9 пунктов меню, вы можете захотеть проверить правильность ввода более сложным способом, поскольку значение $REPLYможет содержать более одного символа.

После цикла выбор из меню доступен в $ch.

0
28.01.2020, 05:19

Используйтеmapfileи select.

напр.

#!/bin/bash

mapfile -t animals < "animal.txt"

select animal in "${animals[@]}"; do
    echo "$animal"
    break
done

бежать:

$./animal.sh
1) dog
2) cat
3) lion
4) bear
#? 2
cat
1
28.01.2020, 05:19

Теги

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