Как настроить команду чтения для выполнения без необходимости нажатия кнопки Enter в оболочке? - PullRequest
4 голосов
/ 29 ноября 2009

Я использую приведенный ниже код для присвоения заданного пользователем символа переменной G:

read G

Однако, чтобы продвинуться вперед в выполнении моего скрипта, мне нужно нажать кнопку ввода. Можно ли как-то установить команду чтения, чтобы она показывала процесс вперед на следующую строку сразу после получения одного письма от стандартного ввода?

Ответы [ 2 ]

5 голосов
/ 29 ноября 2009

Если вы используете Bash:

read -n1 G

Ваша система настроена на использование тире по умолчанию, и тире не поддерживает эту функцию, поэтому вам также необходимо изменить первую строку вашего скрипта, чтобы указать, что вы хотите использовать bash:

#!/bin/bash
2 голосов
/ 29 ноября 2009

Я думал, что dd может быть в состоянии сделать это, поэтому я попробовал это и ничего не получил. Однако, Google нашел это для меня, и я адаптировал его здесь:

readOne () {
    local oldstty
    oldstty=$(stty -g)
    stty -icanon -echo min 1 time 0
    dd bs=1 count=1 2>/dev/null
    stty "$oldstty"
}

Определите эту функцию один раз в начале вашего скрипта, затем вы можете использовать ее следующим образом:

char=$(readOne)    # get the character
echo $char         # print the character (or you can do something else with it)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...