Bash循环输出格式化问题:文件存在提示覆盖不完整求助
解决文件存在提示残留字符的问题
问题根源是:你用\r回到行首后,输出的"FILE EXISTS"长度远短于之前的"FILE DOES NOT EXIST YET",终端不会自动清除行尾未被覆盖的字符,导致残留内容。
给你几个实用的解决办法:
方法1:用ANSI清行序列彻底清除当前行
把then分支的echo命令改成:
echo -e "\e[2K\e[1;32m FILE EXISTS\e[0m"
\e[2K是ANSI转义序列,作用是清除整行内容,不管之前行里有多少字符,清除后再输出绿色提示,就能彻底避免残留。
方法2:用tput el清除行尾残留
tput el是终端控制命令,会清除从光标位置到行尾的所有内容。修改后的then分支:
echo -en "\r\e[1;32m FILE EXISTS\e[0m" ; tput el ; echo
先回到行首,输出提示,再清除行尾没被覆盖的部分,最后换行结束循环。
方法3:填充空格覆盖残留(不推荐,灵活性差)
如果不想用转义序列或终端命令,可以在"FILE EXISTS"后面加足够多的空格,长度超过之前的"FILE DOES NOT EXIST YET":
echo -e "\e[1;32m FILE EXISTS \e[0m"
但这种方法硬编码了空格数,一旦提示文本长度变化就会失效,只适合临时场景。
另外提醒:你脚本里的$file变量未赋值,应该在循环前加上file="file",否则[[ -e $file ]]会检查空字符串命名的文件,逻辑是错误的。
内容的提问来源于stack exchange,提问作者Calisthenics
相关产品推荐
相关产品推荐

