web-dev-qa-db-ja.com

docker execコマンドの出力でgrepを実行する

質問が非常に混乱し、ひどく言い回されていたので、私は質問を言い換えています...)-:

Dockerコンテナがあり、次のようにログを読み取っています。

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

今、私は出力に「grep」を使用したいのですが、これが機能しているので問題に直面しています:

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

これは機能していませんが:

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

(最初の作業コマンドには、送信するコマンド内にgrepが含まれ、2番目のコマンドでは出力に対してgrepを実行することに注意してください)

スクリプトでコマンドを実行していて、このスクリプトの出力でgrepを実行できるようにしたいので、これは私にとって重要です。

3
Hovav

スクリプトは「exec -it」を実行しています。「t」はttyを表します

zlessは「考える」ことで、追加のパイプなしでttyを前に持っています...

't'を削除すると問題が解決しました(現在はzlessではなくzcatのように動作していますが、パイピングが機能しているので、それをlessにパイプするだけです...)

3
Hovav

パイプラインの要点は本当にわかりません。 zlessは対話型プログラムで、lsの出力はlooked atであり、解析されません。

代わりに:

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

または、ファイルが多すぎる場合は、

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

または、より効率的に、

... sh -c 'find /logs/ -maxdepth 1 -type f -name "my-log.*" -exec zgrep PATTERN {} +'
1
Kusalananda