Gönderen Dot açıklama çizgi
Yaptığın fark,
ile sh
, interpret the lines in your script
terminalin etkileşimli komut isteminde yazdığınız gibi bir program çalıştırıyorsunuzdur ,
./ ile betiğin tam burada oturduğunuz dizinde olduğunu ve çalıştırılabilir olacağını varsayarak bir kısayol yapıyorsunuz (örneğin, chmod + x myscript.sh dosyasını yayınladınız),
Bu cevaptan ek bilgi :
Özel betiğiniz için her iki şekilde de işe yarar, bunun dışında ./script.sh çalıştırma ve okunabilir bitler gerektirir, bash script.sh yalnızca okunabilir bit gerektirir.
İzin gereksinimi farkının nedeni, betiğinizi yorumlayan programın nasıl yüklendiğine bağlıdır:
./script.sh, kabuğunuzun dosyayı düzenli bir çalıştırılabilirmiş gibi çalıştırmasını sağlar. Kabuk kendisini çatallar ve işletim sisteminin çatallanmış işlemdeki dosyayı çalıştırmasını sağlamak için bir sistem çağrısı (örneğin yürütme) kullanır. İşletim sistemi, dosyanın izinlerini kontrol eder (bu nedenle yürütme bitinin ayarlanması gerekir) ve isteği, dosyayı inceleyen ve nasıl yürüteceğini belirleyen program yükleyiciye iletir. Linux'ta derlenen çalıştırılabilir dosyalar bir ELF sihir numarası ile başlar, scriptler # ile başlar! (Hashbang). Bir hashbang başlığı, dosyanın bir komut dosyası olduğu ve hashbang'dan sonra belirtilen program tarafından yorumlanması gerektiği anlamına gelir. Bu, komut dosyasının kendisinin sisteme komut dosyasını nasıl yorumlayacağını söylemesini sağlar.
Komut dosyanızla birlikte program yükleyici / bin / bash komutunu çalıştırır ve ./script.sh dosyasını komut satırı argümanı olarak iletir.
bash script.sh kabuğunuzu bash çalıştırmasını ve komut satırı argümanı olarak script.sh iletmesini sağlar. Böylece işletim sistemi bash'ı yükler (hatta sadece bir komut satırı argümanı olduğundan script.sh dosyasına bakmazsınız). Oluşturulan bash işlemi daha sonra komut satırı argümanı olarak geçirildiği için script.sh dosyasını yorumlayacaktır. Script.sh sadece bash tarafından normal bir dosya olarak okunur, çünkü yürütme biti gerekli değildir.