2016-03-17 2 views
0

Я хочу предоставить пользователю приглашение нажать любую клавишу или подождать, пока тайм-аут продолжит работу с оболочкой. Обычно в этом случае решаются следующей идиома:Нажмите любую клавишу с прохождением таймаута в оболочке

read -rs -t3 -n1 "Press any key or wait to continue ..." 

Однако эта подсказка кажется немного неуклюжей для меня, и я хотел бы, чтобы остались только «Нажмите любую клавишу для продолжения ...» часть сообщения и указать тайм-аут с точками, напечатанными каждую секунду. Итак, я пишу следующий сценарий:

#!/bin/sh 

echo -n "Press any key to continue"; 

for _ in `seq 3`; do 
    if ! read -rs -n1 -t1 ; then echo -n "."; else break; fi 
done 

echo 

Он работает так же, как я ожидал, но, очевидно, есть слишком много кода, так что я должен поместить в отдельный файл, вместо того, чтобы использовать в качестве sh -c "..." в сценарии. Есть ли способ реализовать его более сжатым и компактным способом?

P.S. Возврат ненулевого кода ошибки на Ctrl-C нажатие является обязательным.

ответ

1

Немного более кратким:

echo -n "Press any key to continue"; 
for _ in {1..3}; do read -rs -n1 -t1 || printf ".";done;echo