Bash scriptleri için .sh veya .bash uzantısını kullanın.


36

(Bkz . Ubuntu-OSX uyumluluğu ve kullanım kolaylığı ve POSIX için #! / Bin / sh veya #! / Bin / bash kullanın )

Komut dosyalarımın bash kabuğunu kullanmasını istersem, .bash uzantısını kullanmak aslında bash'ı çağırır veya sistem config / 1st shebang satırına bağlıdır. Her ikisi de etkili ancak farklı olsaydı hangisi önceliğe sahip olurdu?

Komut dosyalarımın #!/usr/bin/env bash.sh ile bitip bitmeyeceğinden emin değilim sadece "shell script" i gösterecek ve ardından ilk satırın bash kabuğunu (örn. ) Seçmesini mi yoksa sadece .bash (satır 1 ayarının da bitmesiyle mi) sonlandıracağımı bilmiyorum. ). Bash'in çağrılmasını istiyorum.


3
Hiç bir .bashuzantı gördüğümü sanmıyorum . Ayrıca, binuzantılara sahip olmayan klasörlerden birine giren komut dosyalarına sahip olmak Debian politikasıdır .
muru

Yanıtlar:


19

.bash uzantısını kullanmak aslında bash'ı çağırır veya sistem config / 1 shebang hattına bağlıdır.

Açıkça bir tercüman kullanmazsanız, çağrılan tercüman kodda shebangkullanılan tarafından belirlenir . Özellikle bir tercüman kullanıyorsanız, o zaman tercüman komut dosyanız için hangi uzantıyı verdiğiniz umrunda değil. Bununla birlikte, uzantı başkaları için ne tür bir senaryo olduğunu açıkça ortaya koymak için vardır.

[sreeraj@server ~]$ cat ./ext.py
#!/bin/bash
echo "Hi. I am a bash script"

Bakın, .pybash betiğine eklenti onu python betiği yapmaz.

[sreeraj@server ~]$ python ./ext.py
  File "./ext.py", line 2
    echo "Hi. I am a bash script"
                                ^
SyntaxError: invalid syntax

Onun her zaman bashkomut dosyası.

[sreeraj@server ~]$ ./ext.py
Hi. I am a bash script

23

Senaryonun isimlendirmesinin nasıl çalıştığı ile ilgisi yok.

Shebang satırı, senaryoyu çalıştırmak için hangi tercümanın kullanıldığını tanımlar.

Bir betiğin sh, bash, perl, ne olduğu kişisel olarak umrumda değil, bu yüzden ne yaptığını söylerim; Yedekleme ekleyerek gereksiz buluyorum. Bunu file scriptnamebilmek istersem dosyanın ne olduğunu bulmak için yapacağım .

Bu nedenle, komut dosyanızın çalışmasını istiyorsanız , ilk satır olarak bashkullanın #!/bin/bash.


4
Ayrıca, senaryo için uygulama seçimi hiç değişmezse (örneğin Python, Perl, C ... olarak yeniden yazılmıştır), .shstil biçiminde bir uzantıya sahip olmamak, onu yeniden adlandırmaya gerek olmadığı anlamına gelir. (Kuşkusuz, bir .shuzantıya sahip bir ikili dosya üreten bir C programının önlenmesi için hiçbir şey yoktur , sadece kafa karıştırıcı olurdu.)
Stephen Kitt

2
#!/usr/bin/env bashTaşınabilirlik için kullanın , burada tartışıldı stackoverflow.com/tr/10383546/54964
Léo Léopold Hertz 준영

4
@ wurtel (gecikmiş yorum, tamam?) Bir uzantı eklemek imho gereksiz olmaktan uzaktır. Çoğu editör, uzantıyı temel alan sözdizimi vurgulamayı destekler, ayrıca dosya türünün anında görünmesini sağlar. Açıklık ve okunabilirlik çok önemlidir.
RolfBly

@RolfBly: Kullandığım düzenleyiciler shebang'ı tanıyor ve sözdizimi vurgulaması sağlıyor. Netlik faydalıdır, ancak çoğu zaman bir komut uygulamak istiyoruz ve daha az yazmam gerekiyorsa ve uygulama dilini hatırlamak zorunda kalmazsam iyidir.
Hontvári Levente,
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.