Başka bir yol, tercümanı çağırmak ve betiğe giden yolu yollamaktır:
/bin/sh /path/to/script
Nokta ve kaynak eşittir. (EDIT: hayır, değiller: KeithB başka bir cevabın yorumunda işaret ettiği gibi, "." Sadece "kaynak" nın hem bash hem de csh ile ilgili kabuklarda çalıştığı bash ile ilgili kabuklarda çalışır.) -place (betiği kopyalayıp yapıştırdığınız gibi). Bu, koddaki tüm işlevler ve yerel olmayan değişkenlerin kalacağı anlamına gelir. Ayrıca, komut dosyası bir dizine bir cd yazarsa, bittiğinde hala orada olacaksınız demektir.
Bir betiği çalıştırmanın diğer yolları onu kendi alt kabuğunda çalıştıracaktır. Koddaki değişkenler, bittiğinde hala hayatta değildir. Komut dosyası dizinleri değiştirdiyse, arama ortamını etkilemez.
/ path / to / script ve / bin / sh scriptleri biraz farklıdır. Genellikle, bir komut dosyasının başında bu gibi görünen bir "shebang" vardır:
#! /bin/bash
Script yorumlayıcısının yolu budur. Çalıştırırken yaptığınızdan farklı bir tercüman belirlerse, farklı davranabilir (veya hiç çalışmayabilir).
Örneğin, Perl komut dosyaları ve Ruby komut dosyaları (sırasıyla) ile başlar:
#! /bin/perl
ve
#! /bin/ruby
Bu komut dosyalarından birini çalıştırarak çalıştırırsanız /bin/sh script
, o zaman hiç çalışmazlar.
Ubuntu aslında bash kabuğunu kullanmıyor, ancak çizgi olarak adlandırılana çok benziyor. Bash gerektiren komut dosyaları, çağrılırken biraz yanlış çalışabilir /bin/sh script
çünkü kısa süre önce tercüman kullanarak bash komut dosyası çağırdınız.
Komut dosyasını doğrudan çağırmakla ve komut dosyası yolunu tercümana iletmek arasındaki bir diğer küçük fark, komut dosyasının doğrudan çalıştırmak için çalıştırılabilir olarak işaretlenmesi gerektiği, ancak yolu tercümana ileterek çalıştırmaması gerektiğidir.
Başka bir küçük varyasyon: eval ile bir komut dosyası yürütmek için bu yollardan herhangi birini ön ekleyebilir, böylece,
eval sh script
eval script
eval . script
ve bunun gibi. Aslında hiçbir şeyi değiştirmez, ama onu eksiksizlik için dahil edeceğimi düşündüm.