Sadece hiç kullanmalısın #! /bin/sh
.
Hiç bir kabuk betiğinde bash (veya zsh, ya da balık, ya da ...) eklentilerini kullanmamalısınız.
Sadece birlikte çalışan kabuk scriptleri yazmalısınız. herhangi Kabuk dilinin uygulanması (kabuğun kendisi ile birlikte gelen tüm "yardımcı program" programları dahil). Bu günlerde yapabilirsin muhtemelen almak POSIX.1-2001 ( değil -2008) kabuğun ve araçların neler yapabildiğine dair yetkili bir makam olarak, ancak bir gün senaryosunu, kabukları ve yardımcı programları 1992'de dondurulmuş olan eski bir sisteme (örneğin, Solaris veya AIX) aktarmak için çağrılabileceğinizi unutmayın.
Ne, cidden mi?
Evet cidden.
İşte bir şey var: Shell bir korkunç Programlama dili. Bunun için gidebileceği tek şey /bin/sh
tek ve tek script tercümanı olan her Unix kurulumunun olması garantilidir.
İşte başka bir şey: çekirdek Perl 5 tercüman bazı yineleme ( /usr/bin/perl
) Daha rastgele seçilen bir Unix kurulumunda mevcut olması muhtemeldir. (/(usr|opt)(/(local|sfw|pkg)?)?/bin/bash
olduğunu. Diğer iyi betik dilleri (Python, Ruby, node.js, vb. - Kabuk ile karşılaştırıldığında bu kategoriye PHP ve Tcl bile dahil edeceğim) kabaca bash ve diğer genişletilmiş kabukları kadar mevcuttur.
Bu nedenle, bir bash betiği yazma seçeneğiniz varsa, Bunun yerine korkunç olmayan bir programlama dili kullanma seçeneğiniz vardır.
Şimdi, basit kabuk komut dosyaları, bir cron işinden veya başka bir şeyden bir dizideki birkaç programı çalıştıran türden, onları kabuk komut dosyası olarak bırakmanın yanlış bir tarafı yoktur. Ancak basit kabuk komut dizileri veya işlevler gerekmez veya [[
Üstelik. Ve sadece yazmalısın karmaşık başka bir seçeneğiniz olmadığında kabuk komut dosyaları. Örneğin, Autoconf komut dosyaları hala düzgün şekilde kabuk komut dosyalarıdır. Fakat bu senaryoların üzerinde durulması gerekiyor. her enkarnasyonu /bin/sh
Bu, yapılandırılmakta olan programla ilgilidir. ve bu, herhangi bir uzantı kullanamayacakları anlamına gelir. Muhtemelen bugünlerde eski patentli Unix'lerle ilgilenmek zorunda değilsiniz, ama muhtemelen meli bazıları kurulmayan mevcut açık kaynaklı BSD'lere özen göstermek bash
Varsayılan olarak ve yalnızca en az kabuk veren katıştırılmış ortamlar busybox
.
Sonuç olarak, kendini bulduğun an eksik taşınabilir kabuk dilinde bulunmayan bir özellik, komut dosyasının bir kabuk komut dosyası olarak kalmayacak kadar karmaşık hale geldiğinin bir işaretidir. Bunun yerine daha iyi bir dilde yeniden yazın.
bash
işlevler ve sözdizimi yerinesh
fonksiyonlar ve sözdizimi.