Como executar um grep de longa execução, canalizar o resultado em menos e colocar tudo em segundo plano?

1

Eu sempre me encontro na situação em que preciso encontrar uma base de código para um determinado símbolo da seguinte forma:

find src/galio -not -path './src/stapi-sdk/apilib/* -regextype posix-extended -iregex '.*(\.hpp|\.hxx|\.cpp|\.cxx|\.h|\.c|\.ma?k|\.sh|makefile)' | xargs egrep --colour=always -Hn 'NUM_EXTERITY_FLAGS' | less -R

A combinação find / grep pode demorar um pouco e eu gostaria de colocar toda a cadeia em segundo plano (usando Ctrl - Z e bg ) e volte mais tarde para ver o resultado.

No entanto, todo o trabalho é imediatamente "Parado" novamente depois de colocá-lo em segundo plano com bg . Existe uma maneira de contornar isso?

Obrigado

    
por Damian Birchler 27.03.2015 / 15:19

2 respostas

3

Eu recomendaria screen para esse tipo de situação. (Ou execute o comando em uma janela diferente, se isso for viável para você.)

Para iniciar uma sessão desanexada, basta digitar screen . Em seguida, digite seu comando, mas sem o & para o fundo. Use Ctrl a e então d para desanexar a sessão em execução. Use screen -ls para listar as sessões existentes e screen -r para reconectar.

    
por 27.03.2015 / 15:44
1

Os dois problemas com menos lentidão em sua pesquisa são esperar no tubo e abrir a saída padrão / erro para leitura. Em operação normal, menos será lido o suficiente para preencher uma tela e parar a leitura até que você avance para a próxima página. Isso funciona bem, a menos que você esteja lendo de um pipe e o programa que está sendo gravado no canal perceba o ID do canal completo e durma até que o canal seja lido e seja muito lento para escrever o suficiente para preencher a próxima página. As duas maneiras mais fáceis de alterar esse comportamento por menos é pesquisar por algo que não existe ou calcular o tamanho da entrada padrão. Ambos lerão o arquivo completo. O problema seguinte é que, para controlar menos, ele precisa receber comandos do teclado, para que ele abra o padrão ou o erro padrão para leitura. Isto é estranho, mas funciona muito bem (com algumas salvaguardas que menos cuida), mas agora tem menos um identificador de arquivo aberto para leitura apontando para o controle tty (que você deseja quando controla menos) que o controle de tarefa do shell percebe quando você coloque as coisas em segundo plano e quando menos tenta ler uma chave, o shell a coloca em repouso. Você pode conseguir contornar isso pesquisando o final do arquivo em menos antes de colocá-lo em segundo plano.

    
por 07.04.2015 / 06:37