我正在编写一个 Bash 脚本,我需要在检查指定的 Git 远程是否存在时显示旋转动画功能。检查Git远程的脚本片段如下:
read remote_to_pull_from
if ! git remote show $remote_to_pull_from &>/dev/null; then
echo "Remote '$remote_to_pull_from' does not exist, exiting..."
return 1
fi
此代码片段工作正常并检查遥控器是否存在。现在,我想添加一个微调器功能,以在 git Remote show 命令运行时显示动画。旋转器功能,归功于this帖子,如下:
spinner() {
local PROC="$1"
local str="${2:-'Running...'}"
local delay="0.1"
tput civis # hide cursor
printf "\033[1;34m"
while [ -d /proc/$PROC ]; do
printf '\033[s\033[u[ / ] %s\033[u' "$str"; sleep "$delay"
printf '\033[s\033[u[ — ] %s\033[u' "$str"; sleep "$delay"
printf '\033[s\033[u[ \ ] %s\033[u' "$str"; sleep "$delay"
printf '\033[s\033[u[ | ] %s\033[u' "$str"; sleep "$delay"
done
tput cnorm # restore cursor
return 0
}
我尝试使用 Stack Overflow 帖子中提到的方法将微调器与条件检查集成,其中微调器动画使用后台运算符 (&) 在后台运行。这是我在检查我的状况时用来让它运行的代码:
read remote_to_pull_from
if ! git remote show $remote_to_pull_from &>/dev/null & spinner $!; then
echo "Remote '$remote_to_pull_from' does not exist, exiting..."
return 1
fi
旋转器旋转,但条件失败,脚本回显错误消息,而没有旋转器,条件正常工作。
我希望在执行 git remote show 命令时运行 spinner 函数,如果远程不存在,脚本应该回显错误消息并退出。如何在条件检查中正确使用此微调函数,我认为我在这里缺少一个逻辑步骤,并且在将其与该函数混合时破坏了条件?我该如何处理这个问题?另外,能解释一下$!的用法吗?在这种情况下? 谢谢大家。
不是完全重写,但你正在寻找这样的东西:
spinner() {
while kill -0 $! >/dev/null 2>&1; do
for pipe in '/' '-' '\' '|'; do
printf '%s Running...\r' "$pipe"
sleep .1
done
done
printf '\n'
wait $!
}
read -p 'Enter remote name: ' remote
if git remote show "$remote" >/dev/null 2>&1 & ! spinner; then
printf 'Remote %q does not exist.\n' "$remote" >&2
exit 1
fi