&& tarafından zincirlenen komutların çıktısını / yönlendirmesini yakalama


11

&&: ile zincirleme ettiğim bir dizi a, b, c komutum var a && b && c.

Hem stdout hem de stderr için tüm komutların çıktılarını yakalamak istiyorum. a && b && c 2>&1 > capture_file yalnızca c komutundan çıktı alır.

Yanıtlar:


11
{ a && b && c; } >capture_file 2>&1

Yeniden yönlendirme sırasına dikkat edin: önce stdout'u yeniden yönlendirmeniz gerekir.


Neden önce stdout?
TLOlczyk

@TLOlczyk 2>&1, stdout (1) hedefini stderr (2) 'ye çoğaltmak anlamına gelir, bu nedenle önceden stdout yönlendirmesini ayarlamadığınız sürece işe yaramaz.
yaegashi

2
@TLOlczyk İlk önce stdout olmak zorunda değil - önce stderr yapabilirsiniz: 2>capture_file >&2(ama yapma, çünkü bu deyimsel değil). Önemli olan, bu akışı diğerine çoğaltmadan önce bunlardan birini dosyaya yönlendirmenizdir.
Toby Speight

1

Komut gruplamasını kullanmanın yanı sıra {}, komutları bir alt kabukta çalıştırabilir ve çıktıyı (ve / veya hatayı) bir kerede yakalayabilirsiniz:

( a && b && c ) >file.txt 2>&1

Misal :

$ ( echo foo && echo bar && echo baz && echos foo ) >check 2>&1

$ cat check
foo
bar
baz
No command 'echos' found, did you mean:
 Command 'echo' from package 'coreutils' (main)
echos: command not found
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.