Sto lavorando a un semplice script bash che dovrebbe essere in grado di funzionare su distribuzioni Ubuntu e CentOS (il supporto per Debian e Fedora / RHEL sarebbe un vantaggio) e ho bisogno di sapere il nome e la versione della distribuzione su cui è in esecuzione lo script ( al fine di innescare azioni specifiche, ad esempio la creazione di repository). Finora quello che ho è questo:
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
Questo sembra funzionare, tornare ubuntu
o centos
(non ho provato altri) come nome della versione. Tuttavia, ho la sensazione che ci debba essere un modo più semplice e affidabile per scoprirlo - è vero?
Non funziona per RedHat. / etc / redhat-release contiene: Redhat Linux Entreprise versione 5.5
Quindi, la versione non è la terza parola, è meglio usare:
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"
*
con +
per evitare la formulazione del commento, dovrebbe essere etc/*-release
, sembra funzionare.
uname -rv | grep -i "name_of_distro"
e usa il codice di uscita?
+-release
funzioni? In effetti stai guardando supponendo che lo sarà/etc/lsb-release
, quindi forse chiamalo così.