Çoğu kullanım için diğerlerinden nesnel olarak daha iyi bir Bash
shebang var mı?
#!/usr/bin/env bash
#!/bin/bash
#!/bin/sh
#!/bin/sh -
Uzun zaman önce, sonuna bir tire eklemenin birisinin komut dosyanıza bir komut iletmesini engellediğini duyduğumu hayal meyal hatırlıyorum, ancak bununla ilgili herhangi bir ayrıntı bulamıyorum.
Taşınabilirlik]1 için #!/usr/bin/env bash
kullanmalısınız: farklı *nixler bash
ı farklı yerlere koyar ve /usr/bin/env
kullanmak PATH
üzerinde bulunan ilk bash
ı çalıştırmak için geçici bir çözümdür. Ve sh
bash
değildir.
/bin/sh
genellikle sistemin varsayılan kabuğuna bir bağlantıdır, bu kabuk genellikle bash
olmakla birlikte, örneğin Debian sistemlerinde daha hafif olan dash
tır. Her iki durumda da, orijinal Bourne kabuğu sh
dır, bu nedenle betiğiniz bazı bash
(2. nesil, "Bourne Again sh") spesifik özellikleri ([[ ]]
testleri, diziler, çeşitli şekerli şeyler, vb.) kullanıyorsa, daha spesifik olmalı ve daha sonra kullanmalısınız. Bu şekilde, bash'in kurulu olmadığı sistemlerde betiğiniz çalışmayacaktır. Bu evrim hakkında heyecan verici bir film üçlemesi olabileceğini anlıyorum... ama bu söylenti olabilir.
Ayrıca sh
olarak çağrıldığında, bash
bir dereceye kadar POSIX standardı sh
gibi davranır (bu konuda GNU dokümanlarına da bakınız).
Bu gerçekten bash betiklerinizi nasıl yazdığınıza bağlıdır. Eğer /bin/sh
betiğiniz bash'e sembolik olarak bağlıysa, bash sh
olarak çağrıldığında, bazı özellikler kullanılamaz.
Bash'a özgü, POSIX olmayan özellikler istiyorsanız, #!/bin/bash
kullanın