当前位置:  开发笔记 > 编程语言 > 正文

如何在同一行显示和更新回声

如何解决《如何在同一行显示和更新回声》经验,为你挑选了3个好方法。

我在Bash中有以下内容(在Linux中)

for dir in Movies/*
do
  (cd "$dir" && pwd|cut -d \/ -f5|tr -s '\n' ', ' >> ../../movielist &&
  exiftool * -t -s3 -ImageSize -FileType|tr -s '\t' ',' >> ../../movielist )
echo "Movie $movies - $dir ADDED!"
let movies=movies+1
done

但我希望这样做,以便"echo"在下一行显示以下回声(不与最后一个echo输出连接,但替换它),以使它看起来像是在更新.类似于具有百分比的进度条将如何显示在同一行上.



1> Luis Alvarad..:

好吧,我没有正确阅读此man echo页面.

如果我添加了第3个转义字符,echo有2个选项可以执行此操作.

2个选项是-n-e.

-n不会输出尾随换行符.这样每次我回应一些东西时,我都不会再去新线.

-e 将允许我解释反斜杠转义符号.

猜猜我想用什么逃脱符号:\r.是的,回车会让我回到起点,看起来我会在同一条线上更新.

所以回声线看起来像这样:

echo -ne "Movie $movies - $dir ADDED!"\\r

我不得不逃脱逃脱的象征,所以巴什不会杀死它.这就是你\在那里看到2个符号的原因.

正如威廉所提到的,printf也可以做类似的(甚至更广泛的)这样的任务.


只是未来的一个注释:printf将完全相同的事情,没有任何选择.printf的优点通常在每个环境和操作系统中表现相似,而echo有时表现得非常不同.对于跨平台脚本(或者如果您认为您可能会关心它),使用printf是最佳实践.
`printf a; printf b`输出`ab` ---`printf a \\ r; printf b`输出`b` ---`printf a \\ r; 睡1; printf b`输出`a`,然后输出`b`

2> arutaku..:

如果我理解得很好,你可以用以下代码取代你的回声:

echo -ne "Movie $movies - $dir ADDED! \033[0K\r"

以下是一个可以运行以了解其行为的小示例:

#!/bin/bash
for pc in $(seq 1 100); do
    echo -ne "$pc%\033[0K\r"
    sleep 1
done
echo



3> Antony Fuent..:

其余的答案非常好,但只是想添加一些额外的信息,以防有人来这里寻找替换/更新多线回波的解决方案.

所以我想和大家分享一个例子.在CentOS系统上尝试了以下脚本,并使用"timedatectl"命令,该命令基本上打印了系统的一些详细时间信息.

我决定使用该命令,因为它的输出包含多行,并且适用于下面的示例:

#!/bin/bash
while true; do
  COMMAND=$(timedatectl) #Save command result in a var.
  echo "$COMMAND" #Print command result, including new lines.

  sleep 3 #Keep above's output on screen during 3 seconds before clearing it

  #Following code clears previously printed lines
  LINES=$(echo "$COMMAND" | wc -l) #Calculate number of lines for the output previously printed
  for (( i=1; i <= $(($LINES)); i++ ));do #For each line printed as a result of "timedatectl"
    tput cuu1 #Move cursor up by one line
    tput el #Clear the line
  done

done

以上将timedatectl永远打印" " 的结果,并将用更新的结果替换先前的回声.

我必须提一下,这段代码只是一个例子,但根据您的需要,可能不是最适合您的解决方案.几乎相同(至少在视觉上)的类似命令是" watch -n 3 timedatectl".

但这是一个不同的故事.:)

希望有所帮助!

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有