É contra o etos linux fornecer um indicador de progresso para executar comandos? [duplicado]

0

Ultimamente tenho lidado com arquivos bastante grandes no Linux. Geralmente, uso comandos como sed , cut , sort , uniq , awk e perl para fatiar, dados e visualizar o conteúdo desses arquivos grandes. Geralmente não tenho certeza se uma operação como essa será concluída em segundos, horas, dias ou " nunca ".

Outras plataformas, como Windows, Mac OS X e Internet, mostram rapidamente ao usuário um indicador da barra de progresso para mostrar a velocidade com que o trabalho ou o upload está progredindo, e talvez até mesmo quanto tempo resta.

Com a maioria dos exemplos acima, é possível estimar o progresso atual pensando ativamente em como exatamente o comando está modificando o arquivo e, em seguida, verificando o tamanho atual da saída no disco. Ou talvez observando a taxa de alteração do tamanho do arquivo no disco. Mas com alguns comandos como sort -d -u big_file > output_file parece que não há maneira possível de saber se a operação será concluída em um minuto ou um ano.

Esse recurso ausente é intencional? Existe uma maneira de fazer isso? Essa necessidade geralmente é evitada por arquivos menores?

Será que um real haxor saberia intuitivamente o progresso dessas operações simplesmente varrendo valores diretamente do arquivo .pid ?

    
por Cory Klein 09.10.2012 / 00:14

2 respostas

3

É contra o ethos do UNIX, sim. Como regra, os comandos Unix não retornam nenhuma saída em sucesso; eles só dão saída em erro. Isso é bom para automação; um script pode tratar qualquer saída de um comando como um relatório de erros e registrá-lo ou enviá-lo para o administrador de sistema. É assim que o daemon cron funciona.

Por favor, lembre-se que o Unix foi projetado para ser automatizado, não ter o administrador de sistema pairando sobre o console, observando tudo o que acontece.

Dito isto, muitos utilitários têm um equivalente do sinalizador -verbose (ou -v ou --verbose), para dar mais saída. O rsync tem o sinalizador --progress, por exemplo. Outras ferramentas ainda detectam se estão sendo usadas em uma sessão interativa ou em um script e adaptam a saída de acordo. O Wget fornece um tipo de indicador de progresso para sessões interativas, outro para scripts, mas pode ser totalmente silenciado.

Existem também vários utilitários (por exemplo, barra , dbar , pv ) que são projetados para serem usados como pipes nas transferências de dados e indicam progresso. Adicione-os quando necessário.

    
por 09.10.2012 / 00:28
2

pv é seu amigo. Insira-o onde quiser ver o progresso.

Como

pv big_file | sort ...
    
por 09.10.2012 / 00:21