Neden birlikte "diye-patlama" nerede başlar #!
gibi #!/bin/bash
? Her zaman böyle yapıldığını kabul ettim, ama arkasında bir neden var mı?
Neden başlayalım #
; bu genellikle bir yorum değil mi? Yoksa yorum olması gereken nokta mı?
Neden birlikte "diye-patlama" nerede başlar #!
gibi #!/bin/bash
? Her zaman böyle yapıldığını kabul ettim, ama arkasında bir neden var mı?
Neden başlayalım #
; bu genellikle bir yorum değil mi? Yoksa yorum olması gereken nokta mı?
Yanıtlar:
Tipik olarak, mesele , sadece karşılık gelir #!
( !
tipik olarak "patlama" olarak adlandırılır ve bu "kadın" ya da "keskin" ya da "hash" için bir bozulması gibi görünüyor #
) - bütün çizgi bir adlandırılır mesele hat
Nasıl kullanılacağını bilmeyen şeylerle geriye dönük uyumluluk için kasıtlı olarak bir yorum karakteri ile başlar; !
ile başlayan bir dosya yüzden sadece, dosyayı başlayan rastgele açıklama ayırmak için muhtemelen olduğunu # this is my script!
çalıştırmayı deneyin this is my script!
tercüman
!
genellikle yürütülecek komutu belirtmek için diğer bağlamlarda kullanılır. Örneğin vim
, kendi komut satırlarına sahip diğer programlarda, bang genellikle komutu dahili arabirimleri yerine bir sistem kabuğunda çalıştırmasını sağlayan çıkış karakteridir.
Bunu anlamak için betiğin ilk satırının 2 farklı program tarafından iki kez okunduğunu anlamalısınız . Çekirdek ilk kez dosyayı açar #!
ve ilk satırda bu karakter dizisini ( ) arar . Bulursa, dosya adını parametre olarak ileterek burada belirtilen kabuk programını çalıştırır. (örneğin, dosya ile /home/me/foo
başlarsa #!/bin/sh
, çekirdek çalışır /bin/sh /home/me/foo
).
Ardından kabuk ( bin/sh
veya herhangi bir tercüman programı belirtilmişse) dosyayı okur. Kabuk, shebang hatları hakkında hiçbir şey bilmiyor ama yine de ilk satırı okuyacaktır çünkü dosyadaki herhangi bir satır gibi ... hepsini okur. Kabuğun davranışını herhangi bir şekilde çökmesini veya değiştirmesini istemezsiniz ... Bunu yapmanın yolu, yorum yapmak ve görmezden gelmektir. Bu nedenle, bir çekirdek komutunun başlaması için en iyi karakter yorum karakteri olacaktır.
Bunun bir yorum olması gerekir, çünkü yalnızca bu şekilde "yorum adı komut dosyası adı" gibi bir komut dosyası çalıştırmak için çalışır. "!" Nin kökenini bilmiyorum.
#!
) açıklaması da dahil olmak üzere oldukça ayrıntılı bir geçmişe sahiptir (dmr hatırlar gibi…#
).