Ulaşmak istediğiniz şeye yaklaşmanın birkaç yolu var.
1. $ BASH_VERSION kullanın
$BASH_VERSION
Değişkende ne olduğunu görmek yeterlidir . Şahsen ben böyle subshell kullanmak istiyorum:
$ (read -d "." version trash <<< $BASH_VERSION; echo "$version" )
4
Not <<<
birlikte kullandığınız için gidiyoruz eğer burada-doc için sözdizimi, taşınabilir değildir /bin/sh
Dash Ubuntu üzerinde ve farklı bir sistem üzerinde başka bir şey olabilir ki,
Alternatif yol, case deyimi veya if deyimi yoluyladır. Şahsen ben bunu yapardım:
bash-4.3$ case $BASH_VERSION in 4.*) echo "Can use associative arrays";; ?) echo "can't use associative arrays" ;; esac
Can use associative arrays
Muhtemelen taşınabilirlik uğruna, muhtemelen böyle bir değişkenin ilk etapta bile ayarlandığını kontrol etmelisiniz. [ -n $BASH_VERSION ]
Bu tamamen bir komut dosyasında kullanılacak işlev olarak yeniden yazılabilir. Uzun bir şey:
#!/bin/bash
version_above_4(){
# check if $BASH_VERSION is set at all
[ -z $BASH_VERSION ] && return 1
# If it's set, check the version
case $BASH_VERSION in
4.*) return 0 ;;
?) return 1;;
esac
}
if version_above_4
then
echo "Good"
else
echo "No good"
fi
Bu çok daha iyi olmasına rağmen, bu bir astar değildir. Miktar üzerinden kalite.
2. Neyin yüklü olduğunu kontrol edin
Eğer filtre çıkışının gerekir Bunun için apt-cache policy
şöyle
$ apt-cache policy bash | awk -F '[:.]' '/Installed:/{printf "%s\n",substr($2,2)}'
4
dpkg-query
bazı filtreleme ile de kullanışlı olabilir awk
.
$ dpkg-query -W bash | awk '{print substr($2,1,1)}'
4
Bunun taşınabilir olmadığını unutmayın, çünkü bir sistemde yüklü dpkg
veya apt
yüklü değilse (örneğin, RHEL veya FreeBSD), size hiçbir faydası olmaz.
3. Bir hata varsa komut dosyasından çıkmak için set -e komutunu kullanın
Etrafında dolaşmanın bir yolu, basitçe bir çağrışımsal dizileri bash
kullanmak ve bunları kullanamadıklarında çıkmaktır. set -e
Aşağıdaki satır #!/bin/bash
, komut dosyası ilişkilendirilebilir dizi kullanamıyorsa komut dosyasının kapanmasına izin verir.
Bu, kullanıcıya açıkça şunları söylemenizi gerektirir: "Hey, gerçekten bash 4.3 veya daha üst bir sürüme ihtiyacınız var, aksi takdirde komut dosyası çalışmaz". O zaman sorumluluk kullanıcıya aittir, ancak bazıları bunun yazılım geliştirmeye gerçekten iyi bir yaklaşım olmadığını iddia edebilir.
4. Tüm umutları bırakın ve taşınabilir, POSIX uyumlu komut dosyaları yazın
bash
komut dosyaları taşınabilir değildir, çünkü sözdizimi Bourne kabuğuyla uyumlu değildir. Yazdığınız komut dosyası yalnızca Ubuntu'da değil, farklı sistemlerde kullanılacaksa, tüm umudunuzu bırakın ve ilişkilendirilebilir diziler dışında bir şey kullanmanın yollarını bulun. Bu, iki diziye sahip olmayı veya bir yapılandırma dosyasını ayrıştırmayı içerebilir. Ayrıca sözdiziminin en az daha taşınabilir olduğu farklı bir dile, Perl veya Python'a geçmeyi düşünün bash
.
$BASH_VERSION
Ve$BASH_VERSINFO
değişkenlerine baktınız mı ?