我需要一個用于旋轉游標的 shell 腳本,我可以將它與“復制”功能一起使用。我嘗試了下面的程式,它可以作業,但我這里唯一的問題是微調器顯示在文本下方。
#!/bin/bash
spinner=('\' '/' '-' '\')
copy(){
echo "copying files..."
spin &
pid=$!
for i in `seq 1 10`
do
sleep 1
done
kill $pid
echo ""
}
spin(){
while [ 1 ]
do
for i in "${spinner[@]}"
do
echo -ne "\r$i"
sleep 0.2
done
done
}
copy
預期輸出:復制檔案...\
uj5u.com熱心網友回復:
#!/bin/bash
spinner () {
local chars=('|' / - '\')
# hide the cursor
tput civis
trap 'printf "\010"; tput cvvis; return' INT TERM
printf %s "$*"
while :; do
for i in {0..3}; do
printf %s "${chars[i]}"
sleep 0.3
printf '\010'
done
done
}
copy ()
{
local pid return
spinner 'Copying 5 files... ' & pid=$!
# Slow copy command here
sleep 4
return=$?
# kill spinner, and wait for the trap commands to complete
kill "$pid"
wait "$pid"
if [[ "$return" -eq 0 ]]; then
echo done
else
echo ERROR
fi
}
copy
根據您使用它的方式,您可能希望更早地隱藏游標,然后再顯示它。copy而不是為多次或spinner呼叫打開和關閉它。例如:
#!/bin/bash
trap 'tput cvvis' EXIT
tput civis
copy
copy
# other stuff
游標在運行時隱藏,在腳本退出時(通常或由于中斷等)tput civis取消隱藏( )。tput cvvis如果您這樣做,請tput從函式中洗掉相應的命令(但保留其他陷阱命令)。
隱藏游標的原因是它會干擾微調器影片。
uj5u.com熱心網友回復:
列印文本Copying files...沒有尾隨換行符,如果你不想要一個:
echo -n Copying files...
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/439538.html
