Чтобы ответить на вопрос буквально (но не то, что вы на самом деле хотите): read -t 0
Тайм-аут, ноль секунд.
- это состояние гонки, в зависимости от того, когда левая сторона готова предоставить данные. Вы можете указать
-t 5
, но в системе с молотом даже это проблематично.
read -t
не стандартизировано в SUSv3. Это в БСД ш, баш, зш. Это не в кш или тире.
Так что вы не можете просто использовать #! / Bin / sh и ожидать получить это.
Основная проблема в том, что даже если на stdin сейчас ничего нет, это не значит, что скоро не будет. Вызов программы обычно оставляет подключенный stdin к терминалу / что угодно, поэтому нет способа определить, что нужно.
Итак, чтобы ответить на ваш вопрос буквально, вы можете это сделать, но на практике вы можете выбрать следующие варианты:
- проверка, является ли стандартное состояние tty:
[ -t 0 ]
- использовать argv для управления поведением