Stderr ve stdout'u komut dosyasında aynı satırdaki farklı dosyalara nasıl yeniden yönlendirebilirim?


180

Bu kadarını biliyorum:

$ command 2>> error

$ command 1>> output

Ben stderr hata dosyasına çıkış ve çıkış dosyası stdout aynı bash satırına çıkış herhangi bir yolu var mı?

Yanıtlar:


292

Sadece bir satıra ekleyin command 2>> error 1>> output

Ancak, >>dosya zaten veri içeriyorsa eklemek içindir. Oysa >dosyadaki mevcut verilerin üzerine yazılır.

Yani, command 2> error 1> outputeklemek istemiyorsanız.

Sadece Tamamlama aşkına yazabilirsiniz 1>gibi >varsayılan dosya tanıtıcı çıkışı olduğu için. böylece 1>ve >aynı şeydir.

Böylece command 2> error 1> output,command 2> error > output


3
Mükemmel cevap! Gerçekten nasıl 1>yazılabilir açıklamanızı seviyorum>
user784637

Bu nasıl bir şey command &2>err.log, sanırım ben tamamen sintaksileri karıştırıyorum. (Tüm bash boru
izomlarının

4
@ThorSummoner tldp.org/LDP/abs/html/io-redirection.html aradığınızı düşünüyorum. Fwiw, command &2>err.logoldukça yasal değil gibi görünüyor - sözdizimindeki ve işareti, dosya tanımlayıcı için hedef olarak kullanılır, örneğin stdout'u stderr'a command 1>&2yeniden yönlendirir.
DreadPirateShawn

@DreadPirateShawn, lütfen ABS'yi referans olarak bağlamayın - zaman zaman açık yanlışlıklar içerir ve sıklıkla kötü uygulama örnekleri içerir. wiki.bash-hackers.org/howto/redirection_tutorial , yönlendirme konusunda çok daha iyi bir referans kaynağıdır.
Charles Duffy

27

Bunu dene:

your_command 2>stderr.log 1>stdout.log

Daha fazla bilgi

Rakamları 0ile 9olan dosya tanımlayıcıları bash. 0standart giriş 1anlamına gelir, standart çıkış 2anlamına gelir, standart hata anlamına gelir. 3aracılığıyla 9diğer geçici kullanımlar için yedek.

Herhangi bir dosya tanımlayıcı, operatör kullanılarak bir dosyaya veya başka bir dosya tanımlayıcıya yeniden yönlendirilebilir >. Bunun yerine operatörü >>, boş bir dosya oluşturmak yerine bir dosyaya eklemek için kullanabilirsiniz .

Kullanımı:

file_descriptor > filename

file_descriptor > &file_descriptor

Lütfen Gelişmiş Bash-Komut Dosyası Kılavuzu'na bakın: Bölüm 20. G / Ç Yeniden Yönlendirme .


Teşekkürler. Bunu bir saat boyunca
arıyorum


9

Veya çıktıları (stdout & stderr) tek bir dosyada karıştırmak isterseniz:

command > merged-output.txt 2>&1

32
Bu sorunun cevabı değil.
Matthias

İnsanlar neden çıktıları birleştiriyor veya çıktıları birleştirmeyi öneriyor?
nurettin

@nurettin: belki sadece bir komutu yürüten ve çıktıyı anında bir günlük dosyasına kaydeden bir komut dosyası satırınız vardır. Söz konusu komut bazen başarısız olabilir, bu nedenle bununla ilgili hataları da aynı günlük dosyasına kaydetmek istersiniz.
streamofstars

@streamofstars evet elbette haklısın belki bazen insanlar bunu istiyor, ben bu soru bağlamında cevap arayan ve yığın akışı boyunca ilgisiz bir sürü bulan biri olarak yorum yapıyordum.
nurettin

0

Birden fazla komutun çıkışı yeniden yönlendirilebilir. Bu, komut satırı için veya en yararlısı bir bash betiğinde çalışır. -sEkrana istemi parola yönlendirir.

Hereblock cmds stdout / stderr ayrı dosyalara gönderilir ve görüntülenecek hiçbir şey gönderilmez.

sudo -s -u username <<'EOF' 2>err 1>out
ls; pwd;
EOF

Hereblock cmds stdout / stderr tek bir dosyaya ve ekrana gönderilir.

sudo -s -u username <<'EOF' 2>&1 | tee out
ls; pwd;
EOF

Hereblock cmds stdout / stderr ayrı dosyalara ve stdout'u görüntülemek için gönderilir.

sudo -s -u username <<'EOF' 2>err | tee out
ls; pwd;
EOF

Kim olduğunuza (whoami) ve kullanıcı adına bağlı olarak bir şifre gerekebilir veya gerekmeyebilir.

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.