Bu diğer cevap biraz kusurlu. Komut
find . -name '*.txt' | head -n 3
Sonra yorumlardan birinde bir açıklama var [benim vurgu]:
headbaşlar ve borunun sol tarafından girişi bekler. Daha sonra findbaşlar ve çıktısını borudan göndererek belirtilen ölçütlere uyan dosyaları arar. İstenilen headsatır sayısını alıp yazdırdığında, boruyu kapatarak sonlandırır. findkapalı boruyu fark eder ve ayrıca sonlandırır. Basit, zarif ve verimli .
Bu neredeyse doğrudur.
Sorun findkapalı boruyu sadece yazmaya çalıştığında fark ediyor - bu durumda 4. eşleşme bulunduğunda. Ama 4. maç yoksa o findzaman devam edecek. Kabuğun bekleyecek!Bir komut dosyasında olursa, boru çıkışının son olduğunu zaten bildiğimiz ve buna hiçbir şey eklenemediğine rağmen komut dosyası bekler. O kadar verimli değil.
Bu özel ise etki ihmal edilebilir find kendi başına hızlı bir şekilde bitirilirse ancak büyük bir dosya ağacında karmaşık arama ile komut, daha sonra yapmak istediğiniz her şeyi gereksiz yere geciktirebilir.
Mükemmel olmayan çözüm,
( find … & ) | head -n 3
Bu şekilde headçıkış yapıldığında kabuk hemen devam eder. Arka plan findişlemi yok sayılabilir (er ya da geç çıkacaktır) ya pkillda bir şeyle hedeflenebilir .
Aradığınız konsepti ispatlamak için /. Biz sadece bir maç bekliyoruz, ancak findher yerde arar ve çok zaman alabilir.
find / -wholename / 2>/dev/null | head -n 1
Sorunu görür görmez Ctrl+ ile sonlandırın C. Şimdi karşılaştırın:
pidof find ; ( find / -wholename / 2>/dev/null & ) | head -n 1 ; pidof find
find . -name '*.txt' -print -quitsadece ilk maçı göstermek ve izinfindilk maçtan sonra çıkış. "N eşleşme bulduktan sonra çık" durumuna uyum sağlamanın mümkün olup olmadığını bilmiyorum.