Как спрятать курсор в терминале во время выполнения скрипта и восстановить его до нормального состояния, если команда прервана? - PullRequest
1 голос
/ 05 ноября 2019

Итак, допустим, у меня есть сценарий, который отображает небольшую анимацию:

while [ condition ]
do
    echo -ne "\rfinished ᕙ( ᐕ )ᕓ "
    sleep 0.3
    echo -ne "\rfinished ᕕ( ᐛ )ᕗ "
    sleep 0.3
done

Проблема в том, что курсор мигает рядом с танцующим маленьким парнем, и это (незначительное) неудобство для меня,Я бы предпочел, чтобы курсор был скрыт.

Поэтому я попытался tput civis, который скрывает курсор. Проблема в том, что вам нужно запустить tput cnorm, чтобы вернуть его в нормальное состояние. В моем примере, если я попытаюсь:

tput civis
while [ condition ]
do
    echo -ne "\rfinished ᕙ( ᐕ )ᕓ "
    sleep 0.3
    echo -ne "\rfinished ᕕ( ᐛ )ᕗ "
    sleep 0.3
done
tput cnorm

Это работает хорошо, если только пользователи Ctrl-C не выходят из моей программы, что приведет к тому, что у них будет невидимый курсор, что действительно раздражает.

Я пытался запустить скрипт так:

./script || tput cnorm

, но это не помогло. (также я предпочел бы иметь возможность запускать скрипт только с ./script)

Это началось как глупая проблема, но теперь мне искренне любопытно узнать, как ее решить.

Итак, есть ли решение этой проблемы, или мне придется терпеть этот маленький мигающий курсор рядом с моей анимацией?

1 Ответ

3 голосов
/ 05 ноября 2019

Не могли бы вы использовать trap?

function cleanup() {
    tput cnorm
}

trap cleanup EXIT

tput civis
while [ condition ]
...
...