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
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ı.
Nasıl bir kullanırken birden çok hatla...
Nasıl bash bir komut başarı kadar deva...
Nasıl bir URL JavaScript kullanarak #s...
Bash, nasıl eğer bir string değer ile ...
Nasıl bir tarayıcı sürümünü tespit EDE...