我寫了一個簡單的腳本,必須在用戶等待時顯示進度。但我得到了不確定的回圈,而且似乎睡眠不作業。這段代碼有什么問題?
#!/bin/bash
spinner=(
"作業"
"作業。 "/span>
"作業。 "/span>
"作業... "/span>
"Working...."。
)
while sleep 10
do
for item in ${spinner[*]}
do
echo -en "
$item"。
睡眠.1
echo -en "
"
done -en
done done
uj5u.com熱心網友回復:
一個想法:
- 使用
bash(系統)變數SECONDS來測量我們的10秒鐘 。
- 使用
tput代碼來改寫一行 。
- 取消
spinner[]陣列(因為值的唯一區別是尾部的周期數)
EraseToEOL=$(tput el)
max=$((SECONDS 10) # 添加10秒到當前計數。
while [ $SECONDS -le ${max} ]
do
msg='等待'
for i in {1.}
do
printf "%s" "${msg}"
msg='. '
睡眠.1
done
printf "
${EraseToEOL}"
done
printf "
"
使用max/SECONDS的方法對OP的當前代碼做一個小改動:
spinner=(
"作業"
"作業。 "/span>
"作業。 "/span>
"作業... "/span>
"Working...."。
)
max=$((SECONDS 10)
while [[ ${SECONDS} -le ${max} ] ]
do
for item in ${spinner[*]}
do
echo -en "
$item"。
睡眠.1
echo -en "
"
done -en
done done
uj5u.com熱心網友回復:
使用in/decrement變數i來放出陣列...
#!/bin/bash
countdown(){
spinner=(
"作業"(){ spinner=(
"作業。 "/span>
"作業。 "/span>
"作業... "/span>
"Working...."。
)
i=4
if [ ${i} -lt 5 ]
then ${i} -lt 5 ].
while true
do
for i in ${i}
do
printf "%s" ${spinner[i]}
睡眠.1
printf "
"
睡眠.1
if [ ${i} -eq 0 ] 。
then [ ${i} -eq 0 ].
# 在這里你可以清理或在零計數時做什么。
printf "
"
unset i
unset spinner
return 0 # Can be used in ${?} from parent bash
else
i=$((${i}-1)
fi)
完成了。
完成
return 1 # Should never be executed
fi
}
# A funny cd;-)
cd(){
倒計時&& printf "%s
" "DONE changing to "${1} # Gives out if return is 0 (${?})
unset cd
cd ${1}
}
#
cd ~
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/332438.html
標籤:
