Vilken dist man kör...

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
Användarvisningsbild
Osprey
Inlägg: 6310
Blev medlem: 06 apr 2008, 00:09
OS: Ubuntu
Ort: Göteborg/Mölndal/Falkenberg
Kontakt:

Vilken dist man kör...

Inlägg 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
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
gusnan
Inlägg: 343
Blev medlem: 17 jan 2007, 08:20
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

Re: Vilken dist man kör...

Inlägg 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/"
Hade tidigare nicket "Cowboy".
Användarvisningsbild
Osprey
Inlägg: 6310
Blev medlem: 06 apr 2008, 00:09
OS: Ubuntu
Ort: Göteborg/Mölndal/Falkenberg
Kontakt:

Re: Vilken dist man kör...

Inlägg 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... :)
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
Användarvisningsbild
Osprey
Inlägg: 6310
Blev medlem: 06 apr 2008, 00:09
OS: Ubuntu
Ort: Göteborg/Mölndal/Falkenberg
Kontakt:

Re: Vilken dist man kör...

Inlägg 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... :)
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
Användarvisningsbild
Osprey
Inlägg: 6310
Blev medlem: 06 apr 2008, 00:09
OS: Ubuntu
Ort: Göteborg/Mölndal/Falkenberg
Kontakt:

Re: Vilken dist man kör...

Inlägg 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.... ;)
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
Användarvisningsbild
Hund
Inlägg: 16492
Blev medlem: 25 jan 2007, 04:15
OS: Gentoo
Ort: Norrland
Kontakt:

Re: Vilken dist man kör...

Inlägg 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=//')
Linuxkompis - En vänlig Linux-gemenskap för alla!
Skriv svar

Återgå till "Terminalforum"