bash script.sh vs ./script.sh vs #shebang


2

Şimdi bir bash kabuğunda olduğumu ve aşağıdakileri yürüttüğümü varsayarak

[me@server]$ bash script.sh

S1) Senaryoyu yürütmek için yeni bir alt bash işlemi yaratıldı mı?

Eğer yaparsam

[me@server]$ ./script.sh

S2) Betiği yürütmek için yeni bir alt bash işlemi oluşturuldu mu?

q3) Öyleyse 2 yöntem arasındaki fark nedir?


Yanıtlar:


1

Gönderen Dot açıklama çizgi

Yaptığın fark,

ile sh, interpret the lines in your scriptterminalin 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.


0
  1. bir çocuk bash işlemi yaratır
  2. yukarıdaki ile aynı (shebang nedeniyle)
  3. ikisi eşdeğerdir, eğer bir çocuğu çatallamak istemiyorsanız veya env değerini korumak istiyorsanız script.sh,

    . ./script.sh

Ancak dikkatli olun

  • Eğer script.shcall exit olursa , mevcut shell'den çıkacaksınız.
  • Eğer kabuk hatasız biterse ilk kabuğa geri dönersiniz.

. scriptaynı source script- help sourcedaha fazlası için bkz (bash komut isteminde).
Hannu,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.