如何使用bash删除你刚写的一行并在同一位置输入新的一行? 我知道这是可能的,Aptitude(apt-get)用它来更新一些内容,看起来很不错。
试试这个:
$ 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
echo -e '\033[1mbold\033[0m\033[4memphasis\033[0m'
)。 - Camilo Martin我不是很清楚您想要什么,但是根据您的终端设置,您可以将^H(控制H)打印到屏幕上,这将使光标向后移动一个位置。
另外请注意,有些终端可以将光标移动到行的开头,在这种情况下,您可以移动到行的开头,打印足够的空格以覆盖整个行(通常从$COLUMNS中获得),然后打印任何消息或其他内容。
如果您明确了您想要什么,我可以回答您, 我会更新我的答案。
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