Нажмите любую клавишу с отображением времени ожидания в оболочке

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

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 является обязательным.


person reddot    schedule 17.03.2016    source источник


Ответы (1)


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

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