有没有办法在用户输入后让显示的内容消失?
例如,拿下面这个文件
#!/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
el
:echotc ce
(也echoti el
中zsh
))