executando grep na saída de um comando do docker exec

0

Estou reescrevendo a pergunta porque foi muito confusa e foi mal formulada ...) -:

Eu tenho um contêiner do docker e estou lendo logs dele assim:

docker exec -it my-container sh -c "export TERM=xterm && ls -t /logs/my-log.* | xargs zless -R"

agora, quero usar o 'grep' na saída e estou enfrentando um problema porque este está funcionando:

docker exec -it my-container sh -c "export TERM=xterm && ls -t /logs/my-log.* | xargs zless -R | grep sometext"

enquanto este não está funcionando:

docker exec -it my-container sh -c "export TERM=xterm && ls -t /logs/my-log.* | xargs zless -R" | grep sometext

(note que o primeiro comando de trabalho inclui o grep dentro do comando que eu envio e no segundo eu executo o grep na saída)

é importante para mim porque estou executando o comando em um script e quero permitir a execução do grep na saída deste script.

    
por Hovav 07.02.2017 / 15:38

2 respostas

1

o script está rodando 'exec -it', 't' significa tty

zless está "pensando" que tem um tty na frente dele sem o tubo adicional ...

remover o 't' resolveu o problema (embora agora ele aja como um zcat e não zless, mas como a tubulação está funcionando, posso simplesmente canalizá-lo para menos ...)

    
por 08.02.2017 / 21:07
0

Eu realmente não vejo o ponto do oleoduto. zless é um programa interativo, e a saída de ls deve ser vista , não analisada.

Em vez disso:

... sh -c 'zgrep PATTERN /logs/my-log.*'

ou, se houver muitos arquivos,

... sh -c 'for pathname in /logs/my-log.*; do zgrep PATTERN "$pathname"; done'

ou, mais eficientemente,

... sh -c 'find /logs/ -maxdepth 1 -type f -name "my-log.*" -exec zgrep PATTERN {} +'
    
por 15.07.2018 / 11:07