ALL çıkışını shell'den bir komuta yönlendirerek filtre görevi görür


1

Çıktıyı filtrelemek ve daha sonra bir dosyaya yazmak için tüm std-çıktılarını bash'tan 'grep' veya 'sed' gibi bir komuta yönlendirmek nasıl?

Bu benim prensipte istediğim şey: exec > >(cat | cat >>/tmp/myoutput.txt). Son komut beklendiği gibi çalışır. İlk Ama eğer Değiştir catile grep -v 'foo'ya da sed 's/foo/bar/g'hiçbir veri dosyasının içine yazılır.

Yukarıdaki örneğin grep veya sed ile çalışmasını nasıl sağlayabilirim?

Arka plan: Hata mesajlarını .xsession-error'lerden filtrelemek istiyorum. sed -i 's/foo/bar/g' .xsession-errors çalışmıyor çünkü sed .xsession-error dosyasını değiştirir ve programlardan gelecekteki çıktısı görünmez. Bu yüzden elde edilecek seçeneklerden biri / etc / X11 / Xsession içindeki bir satırı mesajları filtreleyen kodla değiştirmek olacaktır.

Daha fazla bilgi burada:

  • catBoruların alt kabukta beklendiği gibi çalıştığını göstermek ve her şeyi bir dosyaya yönlendirmek için 2 kez kullandım . catTabii is not nihai sürümde gerekli.
  • Tamponları doldurmak için yeterli verim vardı, çünkü ls /usr/tamponları doldurmak için birkaç kez yaptım .)
  • exec | sed ... çalışmıyor

1
Neden bir alt işlem yaratıp catbaşka birine girmelisiniz cat? Denedin exec | sed ... >> filemi
billc.cn

Belki de henüz bir arabellek doldurmak için henüz yeterli çıktı yok?
glenn jackman

(1) Kullanmakta olduğunuz gerçek komutları gösterip göstermemek yerine, "yerine cat | catbaşka bir komutun dışında bir şey yapmak istiyorum" demekten fayda olabilir cat. (2) Denediğini düşündüğüm şeyi denedim ve istediğin gibi çalıştı. (3) bash | sed …Bash'ı başlatmak ve sonra çıktısını yönlendirmek yerine yapabilir misin ?
Scott

Soruyu birkaç kez okuyun, yine de anlayamıyorsunuz ... neyse, tee denediniz mi?
Chris.C

Yanıtlar:


0

Örnek:

  1. bash açmak
  2. komutu çağır exec > >(cat | cat >>/tmp/myoutput.txt)
  3. başka bir komut çağırın örn. `-R / usr '
  4. sonlandırmak exit
  5. /tmp/myoutput.txt dosyasına bir göz atın, lskomutun çıktısını göreceksiniz
  6. Bu adımdan komutu değiştirirseniz exec > >(sed 's/usr/--HEREAMI--/g' >/tmp/myoutput2.txt)

Bu çalışıyor .. Sonunda
Görünüşe göre, gerçekten tampon doldurma ile ilgili bir sorun. Birkaçı ls /usryeterli değil, fakat ls -R /usrtamponu dolduruyor. Şimdi tamponlamayı nasıl önleyeceğimi çözmem gerekiyor.

(Yorum yaptığınız ve bir örnek talep ettiğiniz için teşekkür ederiz, bu çözüm getirdi.)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.