Sorunuzun yalnızca 1) sini kapsıyor.
Doğal olarak API'ler her zaman yaratıcılarının isteğine bağlı olarak değişebilir ve bu nedenle bağımlı yazılımı herhangi bir dilde bozabilir. Bununla birlikte, Unix araçlarının ' G / Ç "API'leri" fikri , pratikte hiçbirinin (belki 0x0a
de satır sonu olarak) olmamasıdır . İyi bir komut dosyası, verileri Unix araçlarıyla oluşturmak yerine filtreler . Bu, komut dosyanızın girdi veya çıktı özellikleri değiştiği için bozulabileceği, ancak kodda kullanılan tek tek araçların I / O formatının (yine gerçekten bir tane olmadığı) değişmediği için değil (çünkü gerçekten var olmayan bir şey gerçekten değişemez).
Temel araçların bir listesini gözden geçirirken, sadece filtrelemenin aksine, üreticiyi de ilişkilendirebileceğim birkaç şey var :
- wc - bayt, kelime, satır sayısını yazdırın - çok basit bir format, bu nedenle kesinlikle değişme olasılığı yoktur ve ayrıca bir komut dosyasında kullanılması pek olası değildir.
- diff - farklı çıktı formatları gelişti ama herhangi bir problem duymadım. Ayrıca gözetim olmadan normalde kullanılmaz.
- date - Şimdi burada, özellikle sistem yerel ayarlarıyla ilgili olarak, ürettiklerimize dikkat etmek zorundayız. Ancak aksi takdirde, tam olarak kendiniz belirtmediğiniz takdirde çıktı biçimi RFC'dir.
- cal - bunun hakkında konuşmayalım, çıktı formatının sistemler arasında çok farklı olduğunu biliyorum.
- ls , kim , w , son - ls ayrıştırmak istiyorsanız yardım edemem, sadece olması amaçlanmamıştı. Ayrıca, w, son olarak, kim daha etkileşimli listelerdir; Bunları bir senaryoda kullanırsanız, ne yaptığınıza dikkat etmeniz gerekir.
- zaman başka bir yazıya işaret edildi. Ama evet, bu ls ile aynı. Etkileşimli / yerel kullanım için daha fazlası. Ve bash yerleşik GNU sürümünden çok farklıdır ve GNU sürümü yıllardır sabitlenmiş hatalara sahiptir. Sadece ona güvenme.
Belirli bir girdi biçiminin bayt akışı olmaktan daha spesifik olmasını bekleyen araçlar şunlardır:
- bc , dc - hesap makineleri. Zaten şeylerin daha hackish tarafında (gerçekten, bunları komut dosyalarında kullanmıyorum) ve muhtemelen çok kararlı I / O formatları.
Kırılma riski çok daha yüksek olan başka bir alan var, yani komut satırı arabirimi. Çoğu araç hem sistemler arasında hem de zaman çizelgesi boyunca farklı özelliklere sahiptir. Örnekler
- Regex - regex kullanan tüm araçlar , sistem yerel ayarlarına (örneğin LC_COLLATE) göre anlam değiştirebilir ve regex uygulamaları arasında birçok incelik ve özellik vardır.
- Sadece süslü anahtarlar kullanmayın.
man 1p find
Örneğin, sistem el kitabı yerine POSIX bulma el kitabını okumak için kolayca kullanabilirsiniz . Sistemimde yüklü manpages-posix'e ihtiyacım var.
Ve bu anahtarları kullanırken bile, normalde hatalar ustaca tanıtılmaz ve verilerinizi zehirlemez. Çoğu program bilinmeyen bir anahtarla çalışmayı reddedecektir.
Sonuç olarak, kabuğun aslında en taşınabilir dillerden biri olma potansiyeline sahip olduğunu söyleyebilirim (taşınabilir olarak komut dosyası yazdığınızda taşınabilir). Küçük hataların olduğu favori komut dosyası dillerinizle veya derlenecek olan derlenmiş programınızla karşılaştırın.
Ek olarak, uyumsuzluklar nedeniyle kırılmanın meydana gelebileceği nadir yerlerde, büyük olasılıkla zaman kaynaklı değil, farklı sistemler arasındaki çeşitlilik nedeniyle olacaktır (yani sizin için çalışıyorsa, 20 yıl önce ve 20 yıl önce yapacak) de). Bu, araçların sadeliğinin bir sonucudur.