Не уверен, что я должен поместить это в stackoverflow или unix.stackexchange, но я нашел здесь similarquestions, так что вот оно.bash scripting - читать одно нажатие клавиши, включая ввод специальных клавиш и пробел
Я пытаюсь создать сценарий, который будет вызываться .bashrc, что позволяет мне выбрать один из двух вариантов, основанный на одном нажатии клавиши. Это было бы не сложно, но я хочу, чтобы два ключа, соответствующие двум параметрам, были свободными и вводились.
Вот что я получил до сих пор:
#!/bin/bash
SELECT=""
while [[ "$SELECT" != $'\x0a' && "$SELECT" != $'\x20' ]]; do
echo "Select session type:"
echo "Press <Enter> to do foo"
echo "Press <Space> to do bar"
read -s -N 1 SELECT
echo "Debug/$SELECT/${#SELECT}"
[[ "$SELECT" == $'\x0a' ]] && echo "enter" # do foo
[[ "$SELECT" == $'\x20' ]] && echo "space" # do bar
done
Следующий вывод, что я получу, если я нажимаю войти, пространство, забой и х:
:~$ bin/sessionSelect.sh
Select session type:
Press <Enter> to start/resume a screen session
Press <Space> for a regular ssh session
Debug//0
Select session type:
Press <Enter> to start/resume a screen session
Press <Space> for a regular ssh session
Debug//0
Select session type:
Press <Enter> to start/resume a screen session
Press <Space> for a regular ssh session
Debug//1
Select session type:
Press <Enter> to start/resume a screen session
Press <Space> for a regular ssh session
Debug/x/1
Так как ввести и результат пространство пустой SELECT. Невозможно отличить их. Я попытался добавить -d 'D' в параметры чтения, но это не помогло. Может быть, кто-то может указать мне в правильном направлении.
Баш версия будет 4.2 кстати.
связанный https://unix.stackexchange.com/questions/179191/bashscript-to-detect-right-arrow-key-being-pressed –