bash - 如何使用 tput 覆盖 read 打印的一行

标签 bash shell sh

tput cuu 1 && tput el 在多个 echo 的情况下工作得很好。但是,如何替换 read 打印的行?

echo "First line..."
read -p "Press any key to overwrite this line... " -n1 -s
tput cuu 1 && tput el
echo "Second line. read replaced."

上面的例子输出:

第一行...第二行。读取替换。

我希望最终结果是:

第一行... 第二行。读取替换。

最佳答案

您的代码没有将光标移动到第 0 列。

一个简单的解决方案是在使用tput scread打印提示之前保存光标位置。

读取用户输入后,您可以使用tput rc恢复光标位置。

您的代码现在应该与此一致。

echo "First line..."
tput sc
read -p "Press any key to overwrite this line... " -n1 -s
tput rc 1; tput el
echo "Second line. read replaced."

希望这有帮助。

关于bash - 如何使用 tput 覆盖 read 打印的一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40924187/

相关文章:

android - 是否可以从 Android 应用程序执行 Shell 脚本

linux - 当目录变空时删除目录内容和目录本身

bash - 为什么 Scala 使用反向 shebang (!#) 而不是仅仅将解释器设置为 scala

bash - 我应该如何将我的 bash 脚本缩减为 5 个 for 循环?

由于目录原因,Ruby 一行失败

matlab - 在 MATLAB 中的 system() 调用之间保持终端 session

linux - 根据唯一时间戳对目录中的文件进行排序并将它们分组

regex - 在 Bash 中递归更改文件扩展名

linux - 使用 exec 执行命令并将进程 ID 传递给另一个命令

linux - 使用脚本更改用户 shell?