Shebang nedir? Neden kullanılır?

Python betiklerinin ilk satırlarında çoğu zaman bu tarz ifadeler oluyor.

#!/bin/bash
#!/usr/bin/perl
#!/usr/bin/python
#!/usr/bin/python3
#!/usr/bin/env bash
#-- coding: utf-8 --

…gibi yazılar var. İnternetten araştırdığım kadarıyla bunlara “shebang” deniyormuş ve genellikle Linux kullanıcıları tarafından kullanılıyor sanırım. Bunların amacı nedir? Neden kullanılır? Windows için bunlara benzer bir uyarı koymak gerekiyor mu? Bu shebanglerden birini belirten kodlar Windows’da doğrudan çalışır mı yoksa çalışması için ekstra bir şey yapmak gerekli mi? Son olarak “#-- coding: utf-8 --” ifadesinde coding kısmı utf-8 dışında hangi değerleri alabilir?

Komut dosyasının nerede çalıştırılacağını belirliyorsunuz bir nevi. Windows’ta koymana gerek yok ama araçlar vardır bunlarla ilgili.
Nerede çalışacağını bilmesi lazım kodun. Bunun için uyarı niteliği görüyor. Farklı bir kabuktan çalıştırsanız bile kodu bunları yazarak belirlediğiniz kabukta çalışmasını sağlayabiliyorsunuz.

Kodları 8 bit okuduğumuz için utf-8 kullanırız. Farklı bölümlemeler kullanmak istersen ve bunlara göre kod yazıyorsan.

  • US-ASCII
  • EBCDIC
  • UTF-16
  • UTF-32

Kullanabilirsin.

Hocam ben şimdi anlamadım konuyu. Ne işe yarıyor bu “Shebang” denen şey tam olarak? Örnek verir misiniz ?

Mesela #!/usr/bin/env python3 yazdım oraya diyelim.
Python ile kodu execute ediyorum. Python yorumlayıcısıyla çalıştırıyorum.

Bilgilendirme için teşekkürler.

Daha önce hiç Linux kullanmadığım için bilmiyorum. Doğru mu anladım acaba mesela Linux üzerinde kodları çalıştırmak istersem çalışması için belirtilen alan içerisinde kodu açmam gerekiyor değil mi?

Tamam ne oluyor o zaman ?

Yorumlayıcıyı belirliyorsun kısaca yani. Neyde çalıştırıcaksın kodun ne senin. Java’mı yazdın. Java yorumlayıcısının yolunu yazıyorsun. Python’mu yazdın onun yorumlayıcısının yolunu. Birden fazla yorumlayıcıda çalışabiliyor mu? Hepsini yazdın. Bu işe yarıyor.

Şimdi senin shell’in var diyelim. Bu shell python terminali olarak düşün kodunda python. Eğer bu terminalde kodu çalıştırırsan kod çalışır. Ama kodun java diyelim ama python terminalinden çalıştırıyorsun o zaman hata verir. Yorumlayıcısını belirliyorsun o zaman çalışıyor.

Kodun senin yemeğin gibi. Yemeğin türü ne? Çorba diyelim. Sen çorbayı çatalla içemezsin. Kaşık lazım. Programa diyorsun ki bak kardeşim kaşık burada.

1 Beğeni

Şimdi anladım. Teşekkürler :+1:t2:

1 Beğeni

Hmm ben de anladım teşekkür ederim. Hangi yorumlayıcının kullanılacağı belirtiliyor.

1 Beğeni

Dosyanin “birlikte acilacagi” programi belirtiyor. #! ile baslayan bir dosyayi calistirdiginda satirin geri kalanindaki program cagriliyor ve komut ona parametre olarak veriliyor (./dosya.sh/bin/bash ./dosya.sh gibi). Windows’ta bu dosya uzantisi ve bir takim registry entry’leriyle belirtiliyor.

Digeri Python 2 icin: PEP 263 – Defining Python Source Code Encodings | peps.python.org

2 Beğeni