Se você tiver que usar echo
, tente com o retorno entre aspas, ou seja, '\r'
, não apenas \r
. A linha inteira é então:
echo -ne $((($i+1)/100))\%'\r'
E dê uma olhada em Por que o printf é melhor que o eco?
Meu sh é bash. Eu preciso de um indicador de progresso de percentil para o meu loop 0 ~ 9999 'for' ... Então eu uso essas linhas dentro do loop, mas a saída é muito estranha.
#!/bin/bash
declare -i percentile
for((i=0;i<=9999;i++))
do
percentile=($i+1)%100
if [ "$percentile" == 0 ];then
echo -ne $((($i+1)/100))\%\r
fi
done
echo -n '\n'
O que eu quero ver é a saída de '1%' e substituir essa linha por '2%' e '3%' ... mas não '1%', '2%', '3%' ... linha por linha.
Depois de executar este arquivo .sh, o que é exibido no terminal é
-ne 1%r
-ne 2%r
-ne 3%r
-ne 4%r
-ne 5%r
-ne 6%r
-ne 7%r
-ne 8%r
-ne 9%r
-ne 10%r
...
O bash simplesmente não reconheceu a opção '-ne' e o escape '\ r' para o comando 'echo', o que devo fazer para resolver este problema?
Se você tiver que usar echo
, tente com o retorno entre aspas, ou seja, '\r'
, não apenas \r
. A linha inteira é então:
echo -ne $((($i+1)/100))\%'\r'
E dê uma olhada em Por que o printf é melhor que o eco?
Não acredito que você esteja usando bash
porque os dois sinalizadores -n
e -e
são normalmente entendidos pelo bash
' echo
utility.
Certifique-se de executar o script especificando explicitamente bash
como o interpretador,
$ bash ./script.sh
ou tornando-o executável e executando-o,
$ chmod +x ./script.sh
$ ./script.sh
Suas operações aritméticas no script também estão erradas (ao calcular percentile
). bash
realiza substituições aritméticas em $(( ... ))
e avaliação aritmética em (( ... ))
.
Veja uma implementação alternativa:
iter=70500
for(( i = 1; i <= iter; i++ )); do
if ! (( i % (iter/100) )); then
printf '\r%d%%' "$(( (100*i)/iter ))"
fi
done
echo
Tags echo options shell-script