As Richard Pennington says, bunu doğru yolu senaryonun ilk satırı olarak
#!/bin/bash
sahip olmaktır.
Ama bu kullanıcıların açıkça sh
kullanarak çağırmak durumunda yardım etmeyecek. Örneğin, eğer #!
çizgi göz ardı edilecektir
sh your-script-name
yazın.
Bunu yapmaktan engellemek gerçekten , ancak komut dosyası üstündeki böyle bir şey ekleyerek vazgeçirmek olabilir:
#!/bin/bash
if [ ! "$BASH_VERSION" ] ; then
echo "Please do not use sh to run this script ($0), just execute it directly" 1>&2
exit 1
fi
Yoksa böyle bir şey yapabileceğini:
#!/bin/bash
if [ ! "$BASH_VERSION" ] ; then
exec /bin/bash "$0" "[email protected]"
fi
Ancak bu çok yanlış çok kolay gidebilir; Örneğin, normalde komut dosyasının adı olan $0
'un aslında onu çağırmak için kullanabileceğiniz bir ad olduğu garanti edilemez. Bunu yanlış anlamışsanız veya sisteminiz biraz yanlış yapılandırılmışsa, sonsuz bir döngüye girmeyi hayal edebiliyorum.
Hata mesajı yaklaşımını öneririm.
(Not: Hata mesajı kullanıcılara yararlı olabilecek senaryo, adını içerir yüzden sadece bu cevabı kaydetmiştiniz.)
@shellter: demek istediniz '/ usr/bin/env '/ bin/env' değil; Benim sistemim örneğin/bin/env' içermiyor. Ayrıca bkz. [Bu soru] (http://unix.stackexchange.com/q/29608/10454) ve [yanıtım] (http://unix.stackexchange.com/a/29620/10454). –
Bu sorunun yararlı olduğuna ve kurallara uymaya devam edebileceğine inanıyorum, örn. o kadar başka şekilde ifade edilmiştir değil, konu dışı eğer sadece "Nasıl yerine sh bash altında yürütmek zorlamak için senaryomu değiştirecek mi?" (Başlık olarak hemen hemen aynı) – Programster