Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在Bash中模拟微调器以获得进度_Linux_Bash_Unix - Fatal编程技术网

Linux 在Bash中模拟微调器以获得进度

Linux 在Bash中模拟微调器以获得进度,linux,bash,unix,Linux,Bash,Unix,我目前正在学习如何使脚本更加冗长。下面的代码显示了一个微调器。但是,我很难修改此微调器,使其具有诸如“下载”之类的文字。我希望单词和微调器都出现在彼此旁边。我不是问如何实现spinner for progress,而是问如何与单词连接。如何实现这一目标 sp='/-\|' sc=0 spin() { printf "\b${sp:sc++:1}" ((sc==${#sp})) && sc=0 } endspin() { printf "\r%s\n" "$@"

我目前正在学习如何使脚本更加冗长。下面的代码显示了一个微调器。但是,我很难修改此微调器,使其具有诸如“下载”之类的文字。我希望单词和微调器都出现在彼此旁边。我不是问如何实现spinner for progress,而是问如何与单词连接。如何实现这一目标

sp='/-\|'
sc=0
spin() {
   printf "\b${sp:sc++:1}"
   ((sc==${#sp})) && sc=0
}
endspin() {
   printf "\r%s\n" "$@"
}

until work_done; do
   spin
   some_work ...
done
endspin

你可以这样做

sp='/-\|'
sc=0
spin() {
   printf "\r${sp:sc++:1} $1"
   ((sc==${#sp})) && sc=0
}
endspin() {
   printf "\r%s\n" "$@"
}
work_done() {
   false
}
some_work() {
   sleep 1
}

until work_done; do
   spin "Downloading"
   some_work ...
done
endspin

虽然我钦佩Ed和Jakuje的DIY精神,但我也喜欢重用其他人的代码。如果你喜欢回收,而不是重新考虑。我将他的
spinner()
函数放入我的shell库,它很容易使用:

#!/bin/bash

. lib.sh

run_10s &

echo -n wait
spinner $!

echo -e "\rdone"
显示

$ ./test_lib
wait [/]
旋转器旋转10秒,然后用
\r
清除左侧包含
等待
的行,您只剩下

$ ./test_lib
done
$

在屏幕上。

旋转器前面会出现“下载”这个词吗?@Code\u Ed\u学生使用printf“\r$1${sp:sc++:1}”而不是在spin函数中,我相信是这样。当旋转的单词很长时spin“下载那个东西ok”然后我们停止它,endspin“success”,当旋转结束时,它将有输出:“成功完成那件事ok”太棒了!我宁愿采用这种方法。然而,我在while循环中调用微调器函数。它最初按预期旋转两秒钟,然后显示“waitwaitwaitwaitwait…”。我怎样才能解决这个问题?