Estou usando svn export
como parte de um script de empacotador para o meu aplicativo e parece que esse comando, como muitos outros, não possui nenhum tipo de barra de progresso.
Eu tenho duas opções no momento:
- usando-o sem opções e assista a milhares de linhas de impressão
- usando
--quiet
e não vendo nada até que seja concluído.
Existe uma maneira de, pelo menos, mostrar o número de linhas emitidas pelo comando, em tempo real? Tal como:
Exporting SVN directory ... 1234 files
E vê esse 1234
incremento de número em tempo real ? Eu posso imaginar canalizando a saída para um comando que faria exatamente isso, mas qual?
fonte
=
diferenças e peculiaridades feias e `=`. :) Por que eles não substituí-lo com a linguagem Python como-syntaxed ...printf
termina com a\r
. E o que acontece se você fizerecho -ne "$I\r"
ouprint -n "$I\r"
. :) Eu useiprintf
, no entanto, porque o padrão é não imprimir uma nova linha no final, então o\r
retorno é apenas o começo. Infelizmente, nem todas as implementações de eco suportam o argumento-e
ou-n
.read
pararead -r
(pois, caso contrário, uma barra invertida no final de uma linha interferiria na contagem). Aliás, com um pouco de trabalho, isso pode ser adaptado para mostrar também a última linha de saída, que pode ser útil para alguns comandos.Essa é uma idéia aproximada, mas você pode usar o
pv
comando para contar o número de linhas conforme elas passam e exibi-las na tela.pv
dentre seus muitos switches, há um-l
switch que conta cada linha à medida que passa.Exemplo
Aqui estou usando um loop while para simular alguns arquivos da sua saída SVN.
Ele continuará substituindo a linha de saída assim:
fonte
Você pode executar seu comando em segundo plano como um trabalho e redirecionar seu stdout (e stderr opcionalmente) para um arquivo de log:
command > logfile &
onde&
designa job (se stderr também, digamos em&>
vez de>
).Então você pode usar o utilitário wordcount para contar o número de linhas em seu arquivo de log
wc -l
.Para mostrar a mudança de estado em uma linha que muda dinamicamente, você pode usar algo como
while true; do echo -en '\r'; wc -l logfile; sleep 1; done
, mas eu não posso forçar o bash a desenhar\r
retorno de carro para eliminar o conteúdo da linha anterior.Veja esta pergunta, é quase uma duplicata: /programming/2388090/how-to-delete-and-replace-last-line-in-the-terminal-using-bash
fonte
printf/print/echo
sugeridos por danny. :) É claro que ele poderia usarless
, mas suponho que ele pode dizerwc -l logfile
sempre que fica impaciente. Eu acho que brincar comncurses
ou limpar a tela é um exagero aqui.echo -e 'r'
comando? Deve apagar o conteúdo impressas anteriormente de linha, de modo que muda dinamicamente, mas não posso forçá-lo a fazer isso :(