Açıkçası, bin
dizinlerdeki yürütülebilir dosyalar ile düzenlenebilir "kaynak" dosyalar arasında bazı farklılıklar var .
- Kaynak dosyalar için, bir sonekin olması yararlıdır, böylece neyin ne olduğunu görebilir ve
#!
satırı taramayı başaramayan daha az akıllı araçlara yardımcı olabilirsiniz .
- Modüllerin için, onlar sadece aynı tercüman (veya hiç tercüman) kullanan tüm bunların programların alakalı bir kümedeki kullandığı ve katılması alışıldık ediyoruz
.pm
, .sh
ya .so
bu gibi durumlarda.
- Yürütülebilir programlar için, adı, kullanıcıların ve diğer komut dosyalarının çağırdığı "programlama sözleşmesinin" bir parçasıdır. Uygulama yapsa bile adın değişmemesi önemlidir ; yani Açıkçası dosya adı olmalıdır değil bir sonek
Derlenmiş bir program durumunda, "kaynak" ve "çalıştırılabilir" arasındaki fark açıktır: biri kaynak kodu, diğeri makine dili veya yorumlanan bayt kodu. Bir komut dosyası durumunda, bariz bir fark yoktur, ancak make
komut, "komut dosyası için kaynak kod" ile "komut dosyasının çalıştırılabilir sürümü" arasında bir ayrım sağlar: "kabuk komut dosyası" için varsayılan "derleyici" cp
.
Ayrı bir $HOME/source
dizin tutmanızı tavsiye ederim , ya da:
- tarafından yapılan gibi bir sembolik bağ tutulması
ln -s ../source/foo.sh $HOME/bin/foo
; veya
- kullanarak değişiklikleri yaptıktan (ve test ettikten sonra) manuel olarak kopyalayın
install -m 755 foo.sh ../bin/foo
; veya
- Bir kullanarak
Makefile
kural gelen kaynak dosyayı kopyalamadan önce bir sözdizimi denetimi gerçekleştirmek için $HOME/source
içine$HOME/bin
Dipnot: Bir kabuk betiği modülü yalnızca başka bir kabuk betiği tarafından kullanılabilir ve bu betiğin iç bağlamını .
veya source
yerleşik komutlarını kullanarak değiştirir . Bu, (herhangi bir program gibi) ayrı bir işlem olarak çalışan ve ana işlemini değiştiremeyen yürütülebilir bir komut dosyasından farklıdır. Zorlu bir kongre olarak, modüller /usr/lib/name_of_program/name_of_module.sh
girerken, komutlar /usr/bin/name_of_command
da girer (ekler olmadan).