Linux: stdout ve stderr'i logger'a nasıl yönlendiririm?


22

Başlangıçta çalıştırmam gereken bir program var, stdout ve stderr'de çıktı var, logger komutunu kullanarak sistem günlüğüne yönlendirmek istiyorum. Başlangıç ​​betiğimde sahip olduğum şey şu:

/ home / dirname / application_name -v | logger 2> & 1 &

Bu, stdout komutunu syslog dosyasına yönlendiriyor, ancak stderr konsola geliyor, bu yüzden komutu düzeltmem gerekiyor.


Yanıtlar:


30

STDERR ve STDOUT'un çıkışını borulamadan önce birleştirmeniz gerekir logger. Bunun yerine şunu deneyin:

/home/dirname/application_name -v 2>&1 | logger &

Örnek

$ echo "hi" 2>&1 | logger &
[1] 26818
[1]+  Done                    echo "hi" 2>&1 | logger

$ sudo tail /var/log/messages
Apr 12 17:53:57 greeneggs saml: hi

Gerçek bir Bash kabuğunda dikkatli kullanıldığında (Dash ile karıştırılmaması için): Kısaltılmış gösterimi burada da kullanabilirsiniz.

$ echo "hi" |& logger &

Not: Bu eşdeğerdir <cmd1> 2>&1 | <cmd2>. Yine yukarıdakileri sadece gerçek bir Bash kabuğunu etkileşimli olarak kullanırken kullandığınızda, yaklaşmak için iyi bir yol olacaktır.

ABSG'den alıntı

# | & Bash 4'e 2> & 1 | kısaltması olarak eklendi.

Referanslar


2
slm, hiçbir suç anlamına gelmez, ancak son şekli, yaygın bashism kötüye. Gereksiz kestirme yolların neden olabileceği sorunların miktarı, kullanımlarından elde edilecek kazancın ne olduğuna değmez. Mesela, sadece kendi makinenizde bile, yukarıdakileri bir betiğe koyarsanız ve dashbetiği sadece önyükleme sırasında çalıştırmaya çalışırsanız ve önyükleme işleminizi tamamlarsanız ... iyi ... Böyle bir sözdiziminden söz edildiğinde her zaman sadece etkileşimli mermiler bağlamında olun veya en azından benim görüşüme göre.
mikeserv

@mikeserv - Alınan hiçbir suç 8-). Bunları ABSG rehberinde oldukları için dahil ediyorum. OP'nin gösterildiğinden beri Bash'i kullandığını ( 2>&1ancak hatalı olduğunu) varsaydım, ancak uyarılarınız oldukça akıllıcadır, örneğin yeni başlayanlarla ilgileniyor. Bu ipuçlarını daha belirgin hale getirip, etkileşimli yalnızca Bash mermileri için tasarlandıklarını belirten bir uyarı yapacağım.
slm

@mikeserv - hayır, sağlam bir tavsiye. Genelde Dash veya Ubuntu kullanmıyorum, bu yüzden bu konulara biraz alışıyorum ama hala çok gerçekler ve Ubuntu / Debian / Dash'in daha yaygın senaryo olması muhtemel olduğu için bunları belirtmek güzel.
slm

Dürüst olmak gerekirse ben de debian kullanmıyorum, fakat birçoğunun yaptığı gibi daha fazla farkında oluyorum. dashYine de kullanırım - gerçekten hızlı.
mikeserv

1
Eh, bu gerekli olmayabilir - etkileşimli bir kabukta bir fark yaratacak kadar hızlı yazamazsınız - zsh kullanıyorum. Ancak, komut dosyaları için çizgi, denediğim diğerlerinden daha hızlı.
mikeserv
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.