SORU
5 Aralık 2008, Cuma


Nasıl Bash iki boru hatları fark EDEBİLİR MİSİN?

Nasıl diff iki boru hatları Bash geçici dosyalar kullanmadan yapabilir misin? İki olduğunu varsayalım komut boru hatları:

foo | bar
baz | quux

Ve çıkışları diff bulmak istiyorum. Tek çözüm belli olur:

foo | bar > /tmp/a
baz | quux > /tmp/b
diff /tmp/a /tmp/b

Mümkün yani geçici dosyalar kullanmadan yapmak Bash mi? Boru bir boru ile bir geçici dosya diff için kurtulabilirsiniz:

foo | bar > /tmp/a
baz | quux | diff /tmp/a -

Ama diff eş zamanlı olarak (herhangi bir bariz şekilde, en azından) her iki boru hattı boru edemezsin. Geçici dosyalar kullanmadan bunu yapmak için bazı akıllı hile /dev/fd ilgili var mı?

CEVAP
5 Aralık 2008, Cuma


2 tmp dosyalarını senin istediğin bir şey değil () ile satırı şöyle olacaktır:

 foo | bar > file1.txt && baz | quux > file2.txt && diff file1.txt file2.txt

İlebasholabilir ama deneyin:

 diff <(foo | bar) <(baz | quux)

BenM's detailed answer, < oluşturur anonim adlı kanalları -- bash tarafından yönetilen belirtildiği gibi oluşturulur ve otomatik olarak, geçici dosyaları farklı olarak yok.
Ancak, Daniel Cassidy işaret "kullanmadan geçici dosyalar" bölümü soru değil saygın: dosya sistemi hala değiştirilmiş (bir dizin girdisini temsil eden adlı boru oluşturulan ve daha sonra kaldırıldı)

Eğer söz konusu söz gibi aksi takdirde, kullanmak zorunda STDİN gibi

 foo | bar > file1.txt && baz | quux | diff file1.txt - && rm file1.txt

bir komut için birden çok giriş boru için kolay bir yol var gibi görünüyor beri hayır.

Sadece borubir çıkışiçinbirden çok girditee komutu:

ls *.txt | tee /dev/tty txtlist.txt 

Yukarıdaki komut *ls çıktısını görüntüler.terminaline txt ve metin dosyası txtlist.txt çıkışları.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ADDVOiCE

    ADDVOiCE

    28 Mayıs 2009
  • MisterBrightside

    MisterBright

    24 Mart 2006
  • SketchBookPro

    SketchBookPr

    6 Mayıs 2009