UbuntuとCentOSディストリビューションで実行できるシンプルなbashスクリプトを開発しています(DebianとFedora / RHELのサポートは利点です)。スクリプトが実行されているディストリビューションの名前とバージョンを知る必要があります。 (ストアの作成などの特定のタスクトリガーで始まります)私がこれまでに得たものは次のとおりです。
OS=$(awk '/DISTRIB_ID=/' /etc/*-release | sed 's/DISTRIB_ID=//' | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m | sed 's/x86_//;s/i[3-6]86/32/')
VERSION=$(awk '/DISTRIB_RELEASE=/' /etc/*-release | sed 's/DISTRIB_RELEASE=//' | sed 's/[.]0/./')
if [ -z "$OS" ]; then
OS=$(awk '{print $1}' /etc/*-release | tr '[:upper:]' '[:lower:]')
fi
if [ -z "$VERSION" ]; then
VERSION=$(awk '{print $3}' /etc/*-release)
fi
echo $OS
echo $ARCH
echo $VERSION
これ〜らしい仕事、復帰、またはubuntu
(centos
他は試していません)、公開名として使用します。しかし、この問題を見つけるためのより簡単で信頼できる方法があるべきだと思います。それは本当ですか?
Red Hatでは動作しません。 /etc/redhat-releaseには以下が含まれています。Redhat Linux Entrepriseバージョン5.5
したがって、バージョンを3番目の単語として使用する代わりに、次のものを使用することをお勧めします。
OS_MAJOR_VERSION=`sed -rn 's/.*([0-9])\.[0-9].*/\1/p' /etc/redhat-release`
OS_MINOR_VERSION=`sed -rn 's/.*[0-9].([0-9]).*/\1/p' /etc/redhat-release`
echo "RedHat/CentOS $OS_MAJOR_VERSION.$OS_MINOR_VERSION"
ベストアンサー1
OS
合計を求めてみるとVER
最新の基準はそうです/etc/os-release
。その前にlsb_release
はとがありました/etc/lsb-release
。以前は、展開ごとに異なるファイルを見つける必要がありました。
これは私の提案です。
if [ -f /etc/os-release ]; then
# freedesktop.org and systemd
. /etc/os-release
OS=$NAME
VER=$VERSION_ID
elif type lsb_release >/dev/null 2>&1; then
# linuxbase.org
OS=$(lsb_release -si)
VER=$(lsb_release -sr)
elif [ -f /etc/lsb-release ]; then
# For some versions of Debian/Ubuntu without lsb_release command
. /etc/lsb-release
OS=$DISTRIB_ID
VER=$DISTRIB_RELEASE
elif [ -f /etc/debian_version ]; then
# Older Debian/Ubuntu/etc.
OS=Debian
VER=$(cat /etc/debian_version)
elif [ -f /etc/SuSe-release ]; then
# Older SuSE/etc.
...
elif [ -f /etc/redhat-release ]; then
# Older Red Hat, CentOS, etc.
...
else
# Fall back to uname, e.g. "Linux <version>", also works for BSD, etc.
OS=$(uname -s)
VER=$(uname -r)
fi
uname
まだ入手するのがARCH
最善の方法だと思います。しかし、あなたが提示した例は明らかにIntelシステムにのみ適用されます。私はBITS
それを次のように呼びます:
case $(uname -m) in
x86_64)
BITS=64
;;
i*86)
BITS=32
;;
*)
BITS=?
;;
esac
ARCH
または、より一般的であいまいなバージョンに変更するか、次のようにx86
しx64
ます。
case $(uname -m) in
x86_64)
ARCH=x64 # or AMD64 or Intel64 or whatever
;;
i*86)
ARCH=x86 # or IA32 or Intel32 or whatever
;;
*)
# leave ARCH as-is
;;
esac
しかし、もちろんそれはあなた次第です。