質問が非常に混乱し、ひどく言い回されていたので、私は質問を言い換えています...)-:
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を実行できるようにしたいので、これは私にとって重要です。
スクリプトは「exec -it」を実行しています。「t」はttyを表します
zlessは「考える」ことで、追加のパイプなしでttyを前に持っています...
't'を削除すると問題が解決しました(現在はzlessではなくzcatのように動作していますが、パイピングが機能しているので、それをlessにパイプするだけです...)
パイプラインの要点は本当にわかりません。 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 {} +'