Ben stderr
yerine stdout
bir bash
komut bir printf
çıktısını yönlendirmek istiyoruz.Bir bash komut dosyasında 'printf' kullanarak 'stderr' dosyasına hata mesajı yazmak için hangi yöntemi kullanmalıyım?
Ben değil şu anda yönlendirilir hiç yerden stderr
veya stdout
ya yönlendirme konusunda soran duyuyorum. Sadece printf
çıkışını stdout
varsayılanı yerine stderr
olarak gönderebilmek istiyorum.
Biraz deney yaptım ve 1>&2
ekinin printf
'a aşağıdaki örnekte gösterildiği gibi, istediğimi yaptığım gibi görünmesini sağladım. Ancak, bash kullanarak deneyimim var. bash
bunu yapmanın bir "iyi" yolu olup olmadığını Yani benim birincil soru nedir? By
"iyi" Ben daha yaygın daha geleneksel, ya da daha deyimsel kullanıldığı bunu yapmanın başka yolu yok? Daha tecrübeli bir bash programcısı bunu nasıl yapar?
#!/bin/bash
printf "{%s} This should go to stderr.\n" "$(date)" 1>&2
printf "[(%s)] This should go to stdout.\n" "$(date)"
Ben de bir ikincil sorum var. Bunu çok fazla sormuyorum çünkü 'un bilmesi gereken, ama daha çok merak ediyorum çünkü neler olup bittiğini daha iyi anlamak istiyorum.
O bir kabuk içinde çalışır yalnızca çalışacaktır yukarıdaki gibi görünüyor. Bir komut satırından denediğimde işe yaramıyor. İşte
ne demek istediğimi bir örnektir.[email protected]:~$ printf "{%s} Sent to stderr.\n" "$(date)" 1>&2 2> errors.txt
{Sat Jun 9 14:08:46 EDT 2012} Sent to stderr.
[email protected]:~$ ls -l errors.txt
-rw-rw-r-- 1 irrational irrational 0 Jun 9 14:39 errors.txt
Ben çıktı sırayla bir dosyaya gitmeli stderr
, gitmeli çünkü hiçbir çıkışı için yukarıdaki printf
komutu beklenebilir. Ama bu gerçekleşmez. Ha?
Evet, aslında, '2> errors.txt 1> & 2' kullanmak istediğim şeydi. Geçmişte aptalca hissediyorum, ama bu, yapmanın doğru yolu benim için "bariz" hale gelene kadar yapmaya devam etmem gereken saçma sapan hatalardan biri gibi görünüyor. ;-) İçgörü için çok teşekkürler. –