是否可以使用bash脚本在终端中打印旋转光标?

时间:2014-03-21 20:45:03

标签: bash shell unix

我见过使用cpythonruby但使用bash的解决方案。我发现最接近的设计是使用这个红宝石控制台解决方案

10.times {
  print "/"
  sleep(0.1)
  print "\b"
  print "-"
  sleep(0.1)
  print "\b"
  print "\\"
  sleep(0.1)
  print "\b"
  print "|"
  sleep(0.1)
  print "\b"
}

我想要一种与之相似的效果。

2 个答案:

答案 0 :(得分:4)

Spinners很不错,但是如果你真的想要一个可控的进度表,它知道你正在处理的IO,请看看pv

这是一个快速而肮脏的微调器。 (许多sleep的非标准实现会让你在几分之一秒内睡不着觉。)

spin() {
   local -a marks=( '/' '-' '\' '|' )
   while [[ 1 ]]; do
     printf '%s\r' "${marks[i++ % ${#marks[@]}]}"
     sleep 1
   done
 }

POSIX Sh

spin() {
  i=0
  marks='/ - \ |'
  while true; do
    if [ $# -lt 4 ]; then
      set -- "$@" $marks
    fi
    shift $(( (i+1) % $# ))
    printf '%s\r' "$1"
    sleep 1
  done
}

答案 1 :(得分:0)

与@kojiro相同但没有printf

spin() {
    local -a marks=( '/' '-' '\' '|' );
    while [[ 1 ]]; do
      echo -ne "${marks[i++ % ${#marks[@]}]}";
      sleep 1;
      echo -ne "\b";
    done;  
}