İlk olarak, etkileşimli bir kabuğa komutun bir parçası olarak yazılsa catbile, mutlaka bir terminal olması gerekmeyen standart çıktıya yazar cat. Standart çıktı yönlendirildiğinde bile terminale yazmak için bir şeye ihtiyacınız varsa, bu o kadar kolay değildir (hangi terminali belirtmeniz gerekir, komut komuttan çalıştırılırsa bir tane bile olmayabilir). (ab) komut yalnızca bir boru hattının bir parçasıysa standart hata çıktısını kullanabilir. Ama catişi gerçekten yaptığını söylediğinden beri , böyle bir durum hakkında soru sormadığını düşünüyorum.
Amacınız bir boru hattına standart çıktıya yazılanları göndermek olsaydı, o zaman kullanarak catuygun olacaktır Kedi Ödülü Yararsız Kullanımı beri, cat file | pipeline(burada pipelineherhangi bir boru hattı için duruyor) daha verimli olarak yapılabilir <file pipeline. Fakat yine de, sizin ifadelerinizden bunun sizin niyetiniz olmadığını anlıyorum.
Bu yüzden endişelendiğin şey o kadar net değil. Yazmak için catçok uzun bulursanız , bir veya iki karakterli takma ad tanımlayabilirsiniz (standart Unix'te kullanılmayan kalan birkaç isim vardır). Ancak catişe yaramaz döngüleri harcayan endişeleriniz varsa, yapmamalısınız.
nullArgüman almayan ve standart girdiyi standart çıktıya (boru hatları için nötr nesne) kopyalayan bir program olsaydı , istediğinizi yapabilirsiniz <file null. Böyle bir program yoktur, ancak yazması kolay olur (yalnızca bir satırlık mainişlevli bir C programı işi yapabilir), ancak catargüman olmadan çağrı yapmak (ya cat -da açık olmak istiyorsanız) bunu yapar.
Bir olsaydı nocattam olarak bir dosya ismi argümanı programı yapamam, eğer şikayet, dosyayı açmaya çalışırsa, aksi takdirde, o sizin için soruyorsunuz sadece ne olacağını standart çıkışa dosyadan kopyalamak ilerler. nullDosyayı açmak, test etmek ve muhtemelen şikayette bulunmak gibi ana işlerden yazmak biraz daha zordur (titizseniz, tam olarak bir argüman olduğuna dair bir test eklemek ve başka türlü şikayet etmek de isteyebilirsiniz). Fakat yine de cat, şimdi tek bir argümanla sağlanan, sadece bunu yapar, bu nedenle herhangi bir nocatprograma gerek yoktur .
nocatProgramı yazmayı başardıktan sonra , neden tek bir tartışmada durdun? Kodu bir döngüye sokmak for(;*argp!=NULL;++argp)gerçekten hiç çaba sarf etmiyor, ikiliye en fazla birkaç makine talimatı ekliyor ve yanlış sayıda argümandan (daha fazla talimatı saklayan) şikayet etmekten kaçınıyor. Voilà cat, birleştirici dosyaların ilkel bir sürümü . (Dürüst olmak gerekirse, biraz düzenlemelisiniz, böylece argümanlar olmadan aynı şekilde davranırlar null.)
Tabii ki gerçek catprogramda, her zaman yaptıkları için birkaç çan ve ıslık eklediler. Ancak öz, catmaliyetlerin “birleştirilmesi” özelliğinin , ne programcı ne de makineyi yürüten makine için gerçekten hiç çaba sarfetmemesidir. Bu tür programların yokluğunu catvurguladığı nullve nocataçıkladığı gerçeği . catSonuç bir boru hattına girerse tek bir argüman kullanmaktan kaçının , ancak sadece terminaldeki dosya içeriğini göstermek için kullanılıyorsa, bağlantılı olduğum sayfa bile bunun yararlı bir kullanım olduğunu kabul eder, bu catyüzden tereddüt etmeyin.
Bunu test edebilir catgerçekten hypthetical etrafında basit bir döngü tarafından uygulanmaktadır nocatarayarak işlevselliği catyerine hemen bu dosya var olmadığını şikayet yerine,: Bir geçersiz ad değil, birinci konumda aralarında birkaç dosya adları ile catilk önce gelen döker geçerli dosyalar ve ardından geçersiz dosya hakkında şikayetler (en azından kedimin davranış şekli budur).