Bash 中的退格键

问题描述 投票:0回答:4

如何将刚刚用 bash 编写的行退格并在其位置上放一个新行?我知道这是可能的,Aptitude (apt-get) 使用它来进行一些更新,看起来很棒。

bash backspace
4个回答
13
投票

试试这个:

$ printf "12345678\rABC\n"
ABC45678

如您所见,输出回车符会将光标移动到同一行的开头。

您可以像这样清除该行:

$ printf "12345678\r$(tput el)ABC\n"
ABC

使用

tput
为您提供了一种将控制字符发送到终端的便携方法。请参阅
man 5 terminfo
了解控制代码列表。通常,您需要将序列保存在变量中,这样您就不需要重复调用外部实用程序:

$ clear_eol=$(tput el)
$ printf "12345678\r${clear_eol}ABC\n"
ABC

1
投票

我不太清楚你想要什么,但是,根据你的终端设置,你可以在屏幕上打印^H(控制H),这会将光标后退一个位置。

另请注意,某些终端能够将光标移动到行首,在这种情况下,您可以移动到行首,打印足够的空格来覆盖整行(通常可从 $COLUMNS 获得)并然后打印任何消息或其他内容。

如果您确切地说明了您想要什么并且我可以回答您,我会更新我的答案。


1
投票

这是一个使用 find 命令和 while-read 循环仅在一行上不断打印到 stdout 的完整文件路径的示例:

command find -x / -type f -print0 2>/dev/null | while read -d $'\0' filename; do 
   let i+=1
   filename="${filename//[[:cntrl:]]/}"   # remove control characters such as \n, \r, ...
   if [[ ${#filename} -lt 85 ]]; then
      printf "\r\e[0K\e[1;32m%s\e[0m  %s" "${i}" "${filename}"
   else
      printf "\r\e[0K\e[1;32m%s\e[0m  %s" "${i}" "${filename:0:40}.....${filename: -40}"
   fi
done; echo

0
投票

最初的问题是关于动画进度条(在 apt-get 中),但似乎没有人真正回答这个最初的问题。

无论如何,我不久前根据这个StackOverflow Thread的最佳答案写了一些代码。有许多精美复杂的进度条,但没有一个是“倒计时”或“消失”的进度条。我也没有讨论该条在实际应用程序中可能代表的数据或位置。根据测量的内容,不存在适用于所有用例的单一解决方案。因此,我把这部分问题留给读者。

快速、Bash、无分叉

#!/usr/bin/bash
    
bar='###################################################################'
for (( i=${#bar}; i>0; i-- )); do
    echo -ne "${bar:1:$i}-\r"
    sleep .1s
done

0.3秒后

 _$ #################################################################'

1.8秒后

 _$ ##################################################

4.6秒后

 _$ ###################

等等。

Bar 可以是任意字符或长度

bar1='#######'

bar2='++++++++++++'

Bash for 循环

for (( i=${#bar}; i>0; i-- ));做

Bash 参数扩展给出字符串变量的长度

i=${#bar}

Echo 带有抑制换行符标志并解释转义字符标志 -n -e

回声-ne

Bash 子字符串扩展变量 $i 扩展为字符串中的字符数:第一个 ${bar} 迭代,然后从那里开始倒数。这也可以做到 具有负偏移。

${参数:偏移:长度}

例如

${酒吧::$i}

Bar 可以替换为其他字符甚至空格;回车“退格”最右边的字符,然后是一个数字并替换一些其他字符或空格,例如连字符“-”

-

+

可配置定时; sleep 接受整数和浮点数作为输入,因此将其配置为每半秒或一秒的多个小数部分(例如 2.7 秒)运行一次

睡眠.1秒

© www.soinside.com 2019 - 2024. All rights reserved.