Per ottenere OS
e VER
, lo standard più recente sembra essere /etc/os-release
.Prima c'era lsb_release
e /etc/lsb-release
. Prima di allora, dovevi cercare file diversi per ogni distribuzione.
Ecco cosa suggerirei
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
Penso uname
per ottenere ARCH
è ancora il modo migliore. Ma l'esempio che hai fornito ovviamente gestisce solo i sistemi Intel. Lo chiamerei BITS
come questo:
case $(uname -m) in
x86_64)
BITS=64
;;
i*86)
BITS=32
;;
*)
BITS=?
;;
esac
Oppure cambia ARCH
per essere le versioni più comuni, ma non ambigue:x86
e x64
o simile:
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
ma ovviamente dipende da te.
Vorrei procedere con questo come primo passo:
ls /etc/*release
Gentoo, RedHat, Arch e SuSE hanno un file chiamato ad es. /etc/gentoo-release
. Sembra essere popolare, controlla questo sito sui file di rilascio.
Debian e Ubuntu dovrebbero avere un /etc/lsb-release
che contiene anche informazioni sulla versione e verrà visualizzato con il comando precedente.
Un altro veloce è uname -rv
. Se il kernel installato è il kernel della distribuzione standard, solitamente a volte trova il nome lì dentro.
lsb_release -a
. Funziona su Debian e immagino Ubuntu, ma non sono sicuro del resto. Normalmente dovrebbe esistere in tutte le distribuzioni GNU/Linux poiché è correlato a LSB (Linux Standard Base).