glibcのバージョンを入手し、ifステートメントで使用してglibcが2.15未満であることを確認したいと思います。
しかし、問題はldd --versionを使用すると文字列として出力されることです。比較のために整数に変換する必要があります。
私はこれをした。
if [ "$(ldd --version | sed -n '1 p' | tr -cd '[:digit:]' | tail -c 3)" -lt 215 ]; then
小数点を削除する必要があり、実際のバージョン番号比較を提供できないため、これは実際には悪いことです。もう1つの問題は、いくつかのglibcバージョンに複数の小数点があることです(ここを参照)。https://en.wikipedia.org/wiki/GNU_C_Library#Version_history)これは、既存の比較が混乱することを意味します。
したがって、これを行うには、glibcのバージョン全体を整数に変換し、複数の小数点がある場合でもバージョン番号を正確に比較できる必要があります。
どんなアイデアがありますか?ありがとう
ベストアンサー1
ldd --version | sed 's/.* //;q' | awk -F. '{ if ($1 > 2 || ($1 == 2 && $2 >= 15)) { exit 0 } else {exit 1} }'
説明する:
このsed
コマンドは出力の最初の行を取得し、ldd --version
最後のスペースの前の内容をすべて削除して終了します(したがって数字のみを印刷します)。
フィールド区切り記号で設定されたフラグ-F
。awk
.
最初の数字(ドットの前)が2より大きい場合または最初の数字が2で2番目の数字が15以上の場合、終了ステータスはawk
「true」になります。それ以外の場合は偽です。
次のスクリプトで使用できますbash
。
if ldd --version | sed 's/.* //;q' | awk -F. '{ if ($1 > 2 || ($1 == 2 && $2 >= 15)) { exit 0 } else {exit 1} }' ; then
echo "Version is 2.15 or later"
else
echo "Version is too old."
fi