用户输入后使文本消失

Gyp*_*aut 9 scripting bash

有没有办法在用户输入后让显示的内容消失?

例如,拿下面这个文件

#!/bin/bash
read -n 1 -p 'how are you ? ' var
if [ "$var" == "y" ]
then
    echo 'Have fun'
else
    echo 'Go to Doctor'
fi
Run Code Online (Sandbox Code Playgroud)

如果你运行这个,输出是

how are you ? yHave fun
Run Code Online (Sandbox Code Playgroud)

我正在寻找让我how are you ?在用户按下键后立即消失的东西

然后消失后打印 Have fun

所以,我希望上述程序的最后一个输出是

Have fun
Run Code Online (Sandbox Code Playgroud)

注意:此外,不应删除在 shell 屏幕上打印的此脚本之上的任何内容。

我在用 bash

ter*_*don 14

使用回车符 ( \r)。这个特殊字符(机械打字机时代的遗留物)会将光标移回行首。然后,您需要与要删除的消息一样多的空格(这将覆盖消息),然后在打印下一条消息之前再次回车以返回到开头。像这样的东西:

#!/bin/bash
echo foo
read -n 1 -p 'how are you ? ' var
if [ "$var" == "y" ]
then
    printf '\r                \rHave fun\n'
else
    printf '\r                \rGo to Doctor\n'
fi
Run Code Online (Sandbox Code Playgroud)

运行上面的脚本打印:

$ foo.sh
foo
Have fun        
Run Code Online (Sandbox Code Playgroud)


Sté*_*las 12

您可以使用:

tput cr
Run Code Online (Sandbox Code Playgroud)

(或printf '\r') 将光标移动到行首。其次是:

tput el
Run Code Online (Sandbox Code Playgroud)

删除直到行尾的所有内容。(tcsh并且zsh也有echotc,你可以通过使用内置termcap的是相当于terminfo elechotc ce(也echoti elzsh))