Sida 1 av 1

Vilken dist man kör...

Postat: 26 jun 2019, 15:30
av Osprey
Ibland har man behov av att ta reda på vilken dist man kör. Antingen för att man själv glömt av det, eller också för att man behöver veta det i ett script för att kunna köra det inom flera distar.

Det här lilla scriptet skriver antingen ut direkt vilken dist (inklusive version) man kör om man kör det rakt av. Om man vill kan man ändra lite längst upp i det och:
  • FULL - Om den är satt till "true" så skrivs allting ut. Om den däremot är satt till "false" så skrivs det enbart ut namnet på disten, t.ex "Ubuntu", "Mint", OpenSUSE" eller "CentOS" etc.
  • LOWER - Om den är satt till "true" så skrivs allt ut i lower-case (små bokstäver). Kan vara bra när man ska kontrollera det i script.
I övrigt är det bara att "tuta och köra"....

Kod: Markera allt

#! /bin/bash
#
FULL=true
LOWER=false
#
if [[ -z $1 ]]; then
	ETC="/etc"
else
	ETC=$1
fi
source $ETC/os-release
if [[ $FULL == true ]]; then
	TMP=$(echo "$NAME $VERSION" | sed 's/Linux//g' | sed 's/  / /g' | xargs)
else
	TMP=$(echo "$NAME $VERSION" | sed 's/Linux//g' | awk '{ print $1 }')
fi
if [[ $LOWER == true ]]; then
	OUT=$(echo $TMP | tr '[:upper:]' '[:lower:]')
else
	OUT=$TMP
fi
echo $OUT
Testat och funkar i Ubuntu, Mint, RHEL, SUSE, CentOS, Fedora, SLED och SLES... :) :D ;D

Re: Vilken dist man kör...

Postat: 26 jun 2019, 15:48
av gusnan
Snyggt!

Dock kan den behöva lite polering när man kör FULL=true på en Debian 10-maskin - ditt skript ger:

Kod: Markera allt

Debian GNU/ 10 (buster)
cat /etc/os-release har följande info:

Kod: Markera allt

PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

Re: Vilken dist man kör...

Postat: 26 jun 2019, 15:59
av Osprey
Aha... ;) ;)

Jo jag polerar ju bort just ordet "Linux", just för att det inte innehåller så mycket information om vilken dist man kör. Och i Mint hamnar det först "Linux Mint", i CentOS och lite annat så hamnar det lite senare...

Och för att kunna få ut just vilken dist det handlar om så måste jag strippa bort det...

Fast i Debian funkar det alltså också, förutom att det skriver ut "GNU/" där det borde skriva ut "GNU".

Men du får väl "Debian" om du inte kör med FULL... :)

Re: Vilken dist man kör...

Postat: 26 jun 2019, 16:09
av Osprey
Det går ju förstås att ändra så att den inte strippar bort "Linux" när man kör med FULL, som här:

Kod: Markera allt

#! /bin/bash
#
FULL=true
LOWER=false
#
if [[ -z $1 ]]; then
	ETC="/etc"
else
	ETC=$1
fi
source $ETC/os-release
if [[ $FULL == true ]]; then
	TMP=$(echo "$NAME $VERSION" | xargs)
else
	TMP=$(echo "$NAME $VERSION" | sed 's/Linux//g' | awk '{ print $1 }')
fi
if [[ $LOWER == true ]]; then
	OUT=$(echo $TMP | tr '[:upper:]' '[:lower:]')
else
	OUT=$TMP
fi
echo $OUT
Kanske en god idé.... :D

Tanken från början var ju bara att jag skulle kunna använda det i olika script för att kunna köra dem i både Ubuntu, SUSE och RHEL. Men sedan kom jag ju på att det vore ett rätt trevligt script att ha ändå, ihop med "uname" och allt annat... :)

Re: Vilken dist man kör...

Postat: 26 jun 2019, 16:14
av Osprey
Notera också att scriptet går att köra mot ett "sidomonterat" system, t.ex om du har monterat något annat (kraschat eller så) på /mnt så kan du ange "/mnt/etc" som parameter... :)

[Edit] Det går att boota upp från en USB-pinne, sidomontera ett annat/krashat system och snabbt få reda på vad det är.... ;)

Re: Vilken dist man kör...

Postat: 04 jul 2019, 11:29
av Hund
Här är ett annat alternativ som kräver lite mindre kod. :)

Kod: Markera allt

#!/bin/bash
var="cat /etc/*-release | grep -w"
case $1 in
    id)
        $var "ID" | sed 's/ID=//'
        ;;
    name)
        $var "NAME" | sed 's/NAME=//'
        ;;
    pretty)
        $var "PRETTY_NAME" | sed 's/PRETTY_NAME=//;s/"//g;s/\// /'
        ;;
esac

Kod: Markera allt

$ distro.sh id
gentoo
$ distro.sh name
Gentoo
$ distro.sh pretty
Gentoo Linux
Om man bara vill ta reda på IDt för att ha det i ett script kan man använda denna rad som sätter variabeln `$distro`:

Kod: Markera allt

distro=$(cat /etc/*-release | grep -w "ID" | sed 's/ID=//')