Bazı kabuk komut dosyası eğitimlerini geçiyordum ve aşağıdaki örnek programı buldum:
#!/bin/sh
clear
echo "HELLO WORLD"
Birisi bana #!/bin/sh
başlangıçtaki yorumun öneminin ne olduğunu söyleyebilir mi?
Bazı kabuk komut dosyası eğitimlerini geçiyordum ve aşağıdaki örnek programı buldum:
#!/bin/sh
clear
echo "HELLO WORLD"
Birisi bana #!/bin/sh
başlangıçtaki yorumun öneminin ne olduğunu söyleyebilir mi?
Yanıtlar:
Buna bir shebang denir ve ana kabuğa betiği yürütmek için hangi tercümanın kullanılması gerektiğini söyler.
Örneğin
#!/usr/bin/perl <--perl script'
#!/usr/bin/php <-- php script
#!/bin/false <--- do-nothing script, because false returns immediately anyways.
Bu satırda gelen hiçbir şeyin belirtilen yorumlayıcıyla "ilgili" olmaması için bir yorum olarak uygulanır. örneğin, tüm komut dosyası dilleri, ile başlayan bir satırın #
bir yorum olduğunu anlama eğilimindedir ve bu !/usr/bin/whatever
bölümü, söz konusu dilde sözdizimi hatası olabilecek kısmı yoksayar .
exec()
, dosyadaki sistem çağrısını çağırır.
Unix'te (yürütülebilir bit ayarlı bir program) bir program yürütmeye çalıştığınızda, işletim sistemi dosyanın ilk birkaç baytına bakar. Bunlar, programın formatına ve programın nasıl yürütüleceğine karar vermek için kullanılabilen "sihirli sayı" yı oluşturur.
#!
sihirli sayı 0x2321'e karşılık gelir (bir ascii tablosuna bakın). Sistem sihirli sayıyı gördüğünde, bir metin komut dosyası ile uğraştığını bilir ve bir sonrakine kadar okur \n
(bir sınır var, ama atm'den kaçıyor). Tercümanı (sapmadan sonraki ilk argüman) belirledikten sonra tercümanı çağırır.
Diğer dosyalar da sihirli numaralara sahiptir. Bir bitmap (.BMP) dosyasına üzerinden bakmayı deneyin less
ve ilk iki karakterin olduğunu göreceksiniz BM
. Bu sihirli sayı, dosyanın gerçekten bir bitmap olduğunu gösterir.
Bu komut dosyasının içinde bulunduğu dosya yürütülebilir durumdaysa, hash-bang ( #!
), işletim sistemine komut dosyasını çalıştırmak için hangi yorumlayıcıyı kullanacağını bildirir. Bu durumda /bin/sh
, örneğin.
Daha fazla bilgi için bir Wikipedia makalesi var.
İlk satır, kabuğa komut dosyasını doğrudan yürütürseniz (./run.sh; / bin / sh run.sh yerine), yorumlamak için bu programı (/ bin / sh) kullanması gerektiğini belirtir.
Bunu, genellikle -e (hatada çıkış) gibi bağımsız değişkenler iletmek veya diğer programları (/ bin / awk, / usr / bin / perl, vb.) Kullanmak için de kullanabilirsiniz.
#!/bin/sh
veya #!/bin/bash
komut dosyasının ilk satırı olmalıdır, çünkü ilk satırda kullanmazsanız, sistem bu komut dosyasındaki tüm komutları farklı komutlar olarak görür. İlk satır ise, #!/bin/sh
tüm komutları tek bir komut dosyası olarak kabul eder ve bu dosyanın dosya ps
içindeki komutları değil komutta çalıştığını gösterir .
./echo.sh
ps -ef |grep echo
trainee 3036 2717 0 16:24 pts/0 00:00:00 /bin/sh ./echo.sh
root 3042 2912 0 16:24 pts/1 00:00:00 grep --color=auto echo
ps
ve gibi kod alıntıları #!/bin/sh
biçimlendirilmelidir.