Я тут недавно игрушку написал. Ну, как написал, реализовал.

Вариант 2048, оптимизированный по занимаемому экранному пространству.

Но у нас тут люди серьёзные, поэтому рассмотрим проблемы, возникающие при реализации вывода скриптов.

Простой пример:

for i in {1..100}; do
  printf "#"
  sleep .3
done

Код просто выводит символы #, примерно 3 штуки в секунду. Всё работает нормально, пока пользователь не начинает что-то набирать на клавиатуре.

И тогда получаем:

######sb#sf#bg#sfbg#wfgb#wg#fg#b###^[[A#^[[B#^[[D#^[[A#^[[B##

Убрать эхо вывода на терминал просто:

stty -echo

Классная команда. После её выполнения нажатые клавиши не отображаются.

Всё работает, команды выполняются, результат отображается, а набранная команда — нет. Как при наборе пароля.

Вернуть всё просто:

stty echo

Но в скриптах желательно обрабатывать прерывания:

trap 'exit' INT HUP TERM
trap 'stty echo;tput cnorm' EXIT
# stop terminal echo
stty -echo
# hide cursor
tput civis
Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Применять исключительно для причинения добра.
man stty
man tput
help trap