Bash Read -t, но в миллисекундах? - PullRequest
0 голосов
/ 03 июля 2018

Привет, в моем коде у меня есть цикл while и в начале этого цикла while я использую функцию read для создания функции kill. Таким образом, каждый раз, когда программа проходит цикл, она сначала проверяет, нажали ли вы кнопку уничтожения.

Проблема в том, что тайм-аут команды чтения не может быть короче 1 секунды. Это делает программу раздражающе медленной.

Есть ли способ тайм-аута команды чтения в миллисекундах? или я должен работать с чем-то еще, чтобы убить программу?

while(true)

do
 read -n1 -t 0.01 killer
 if [ "$killer" == "k" ]
 then
   echo "ill!!!"
   pkill -9 -e -f gnome-terminal- # a ros node that's running in the background
   pkill -9 -e -f Test_PI.sh # the name of the bash
 fi

 echo "working"
 clear
done

1 Ответ

0 голосов
/ 03 июля 2018

Вы неверны, read может обрабатывать дробные таймауты.

$ time read -t 0.4
real    0m0.400s
user    0m0.000s
sys     0m0.000s

Так что я бы изменил ваш сценарий на

while true; do
  if read -n1 -t 0.01 key; then
     if [[ "$key" == "k" ]]; then
        ...
     fi
  fi
done

Или, если вы используете нулевые тайм-ауты, вы можете сделать

while true; do
  if read -t 0 && read -n1 key; then
     if [[ "$key" == "k" ]]; then
        ...
     fi
  fi
done

-t timeout :: Вызвать read тайм-аут и вернуть ошибку, если полная строка ввода не считывается в течение тайм-аута. timeout может быть десятичным числом с дробной частью, следующей за десятичной точкой. Этот параметр действует, только если read читает входные данные из терминала, канала или других специальных файлов; это не влияет на чтение из обычных файлов. Если timeout равно 0, чтение возвращает успех, если входные данные доступны по указанному дескриптору файла, в противном случае ошибка. Состояние выхода превышает 128, если превышено время ожидания.

Источник: man bash, секция read

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...