Как установить значение времени ожидания с плавающей запятой для команды чтения в bash? - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть скрипт, в котором я должен принимать данные от пользователя с тайм-аутом менее секунды (0,03). Я использую команду чтения с опцией -t, которая работает со значениями с плавающей запятой в linux bash (по крайней мере, в arch и debian). Однако версия встроенной функции чтения bash для macOS работает только с целочисленными значениями.

оригинальная команда:

read -sn3 -t 0.03 INPUT

Я пытался использовать команду timeout, но, конечно, она не работает с встроенные оболочки. Я также попытался отправить ввод через fifo после желаемого времени, чтобы остановить чтение, но я не мог понять, как читать из файла и из stdin одновременно.

РЕДАКТИРОВАТЬ:

вот ошибка, возвращаемая чтением:

bash: чтение: 0,03: неверная спецификация тайм-аута

1 Ответ

1 голос
/ 14 февраля 2020

У меня была такая же проблема. Попробуйте запустить эти команды

$ echo $BASH_VERSION
3.2.57(1)-release

$ bash -c 'echo $BASH_VERSION'
5.0.7(1)-release

Как видите, существует две версии оболочки bash. Запустите ваш скрипт с этим синтаксисом

bash your-script-path

, а не просто

your-script-path

Таким образом, вы будете использовать новый bash, поддерживающий команду read с десятичной дробью тайм-аут. Если у вас другая ситуация, например. более старый bash, установите новый с помощью homebrew

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