linux - 如何在脚本期间隐藏终端中的光标并在命令中断时将其恢复正常?

标签 linux bash shell

假设我有一个显示小动画的脚本:

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 s out of my program,这会导致他们有一个不可见的光标,这真的很烦人。

我试图像这样运行脚本:

./script || tput cnorm

但它没有帮助。 (我也希望能够仅使用 ./script 运行脚本)

这开始是一个愚蠢的问题,但现在我真的很想知道如何解决它。

那么,这个问题是否有解决方案,或者我是否必须容忍我的动画旁边的这个小闪烁的光标?

最佳答案

你能用 trap 吗? ?

function cleanup() {
    tput cnorm
}

trap cleanup EXIT

tput civis
while [ condition ]
...

关于linux - 如何在脚本期间隐藏终端中的光标并在命令中断时将其恢复正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58712760/

相关文章:

bash - 递归运行 `tmutil isexcluded`

在 C 中创建一个新目录

c - 为什么 fcntl() 不阻塞 WSL 中的 F_SETLKW?

regex - 内存部分的 Sed 用法

bash - 检查输入是否在 Conda 环境中

python - 禁用 argparse 参数的正则表达式

c++ - 调用存储在映射中的模板化 std::function

bash - 创建用于 bash 输出处理的临时文本文件并在进程结束后删除该文件的最佳方法是什么

bash - 将多个参数传递给 UNIX shell 脚本

bash - 如果特定列之后超过 60% 或更多的列包含相同的特定值,我该如何删除整行?