Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

Auf welcher Linux Distro läuft ein Script?

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Benutzeravatar
framp
Moderator
Moderator
Beiträge: 4321
Registriert: 6. Jun 2004, 20:57
Wohnort: bei Stuttgart
Kontaktdaten:

Re: Auf welcher Linux Distro läuft ein Script?

Beitrag von framp »

tisu hat geschrieben:Könnte man das nicht auch durch eine 3-fache if-Abfrage realisieren? Bzw. einer Schleife mit verschachtelter if-Anweisung? Das müsste doch eigentlich gehen, denn im Endeffekt hast Du doch nur *release, issue und *version abzufragen ...
Implementierungsmäßig ist das kein Problem. Ich bin einfach auf der Suche nach einer schon existierenden Lösung (Sollte ja öfters ein Problem unter Linux sein) bzw Idee wie ich es machen kann. Und die Sache mit lsb_release klingt ja schon sehr gut. Vermutlich werde ich lsb_release benutzen sofern verfügbar und ansonsten manuell in den Files parsen.
tisu
Hacker
Hacker
Beiträge: 484
Registriert: 25. Sep 2007, 09:58
Wohnort: Köln

Re: Auf welcher Linux Distro läuft ein Script?

Beitrag von tisu »

Manche Distributionen haben lsb-release und manche haben lsb_release. [Man achte auf die Strichsetzung]
openSUSE 11.4 (x86_64)
KDE: 4.6
Bild
Benutzeravatar
framp
Moderator
Moderator
Beiträge: 4321
Registriert: 6. Jun 2004, 20:57
Wohnort: bei Stuttgart
Kontaktdaten:

Re: Auf welcher Linux Distro läuft ein Script?

Beitrag von framp »

tisu hat geschrieben:Manche Distributionen haben lsb-release und manche haben lsb_release. [Man achte auf die Strichsetzung]
Danke für den Hinweis. Korrektur: Versuch erst mit lsb_release, dann lsb-release und dann eigenes parsen.
cero
Guru
Guru
Beiträge: 2292
Registriert: 5. Mai 2004, 20:33
Wohnort: nähe Buchholz i.d.N.

Re: Auf welcher Linux Distro läuft ein Script?

Beitrag von cero »

tisu hat geschrieben:Manche Distributionen haben lsb-release und manche haben lsb_release. [Man achte auf die Strichsetzung]
...und manche haben es garnicht :-)
Wissen, was man weiß,
und wissen, was man nicht weiß,
das ist wahres Wissen.
(Konfuzius)


"Auf der dunklen Seite gibt es keine Kekse, Luke! Bleib lieber hier!" - Obi-Wan Kenobi
Benutzeravatar
framp
Moderator
Moderator
Beiträge: 4321
Registriert: 6. Jun 2004, 20:57
Wohnort: bei Stuttgart
Kontaktdaten:

Re: Auf welcher Linux Distro läuft ein Script?

Beitrag von framp »

tisu hat geschrieben:...Manche Distros kennen nicht lsb-release sondern lsb_release... Müsste Standard sein überall

http://linux.die.net/man/1/lsb_release...
lsb_release ist leider nicht in allen Distos standardmäßig installiert. lsb-release gibt es lt Standard nicht als Command. Dagegen ist die Datei /etc/lsb-release aber standardkonform. Ist allerdings ein ziemlicher KuddelMuddel bei den Distros diesbezüglich. Ich bin am Evaluieren mit VMWare-Installationen von verschiedenen Distros. Sobald ich Ergebnisse habe werde ich sie hier posten.
cero
Guru
Guru
Beiträge: 2292
Registriert: 5. Mai 2004, 20:33
Wohnort: nähe Buchholz i.d.N.

Re: Auf welcher Linux Distro läuft ein Script?

Beitrag von cero »

Ist /etc/lsb-release auch bei neuen sidux-Installationen dabei? Bei mir finde
ich diese Datei leider auch nicht :nosmile:
Wissen, was man weiß,
und wissen, was man nicht weiß,
das ist wahres Wissen.
(Konfuzius)


"Auf der dunklen Seite gibt es keine Kekse, Luke! Bleib lieber hier!" - Obi-Wan Kenobi
Benutzeravatar
framp
Moderator
Moderator
Beiträge: 4321
Registriert: 6. Jun 2004, 20:57
Wohnort: bei Stuttgart
Kontaktdaten:

Re: Auf welcher Linux Distro läuft ein Script?

Beitrag von framp »

cero hat geschrieben:Ist /etc/lsb-release auch bei neuen sidux-Installationen dabei? Bei mir finde
ich diese Datei leider auch nicht :nosmile:
Findest Du auch nichts mit

Code: Alles auswählen

ls /etc/*[-_]{release,version}  
?
Die Distros sind da ziemlich unterschiedlich :(
Benutzeravatar
framp
Moderator
Moderator
Beiträge: 4321
Registriert: 6. Jun 2004, 20:57
Wohnort: bei Stuttgart
Kontaktdaten:

Re: Auf welcher Linux Distro läuft ein Script?

Beitrag von framp »

Anbei das Script wie versprochen. Wer eine weitere noch nicht getestete Distro hat kann das Script ja gerne auf dieser ausführen und sein Ergebnis incl Distro Version hier posten ;-) Ich update dann hier den Header des Scripts.

Code: Alles auswählen

#!/bin/bash

detectedDistro="Unknown"
regExpLsbInfo="Description:([^ ]*)"
regExpLsbFile="/etc/(.*)[-_]"

#
# Shell script which detects the Linux distro it's running on
#
# Returned distro     Version the script was tested with
# ---------------------------------------------------------
# opensuse              openSuSE 11.0 (no lsb_release) and 11.2 (lsb_release)
# fedora                Fedora 12
# centos                CentOS 5.4
# kubuntu               Kubuntu 9.10
# debian                Debian 5.0.3
# arch                     Arch
# slackware            Slackware 13.0.0.0.0
# mandriva             Mandriva 2009.1
# debian                 Knoppix 6.2
# linuxmint              Mint 8

if [ `which lsb_release 2>/dev/null` ]; then       # lsb_release available
   lsbInfo=`lsb_release -d`
   if [[ $lsbInfo =~ $regExpLsbInfo ]]; then
      detectedDistro=${BASH_REMATCH[1]}
   else
      echo "??? Should not occur: Don't find distro name in lsb_release output ???"
      exit 1
   fi

else                                               # lsb_release not available
   etcFiles=`ls /etc/*[-_]{release,version} 2>/dev/null`
   for file in $etcFiles; do
      if [[ $file =~ $regExpLsbFile ]]; then
         detectedDistro=${BASH_REMATCH[1]}
         break
      else
         echo "??? Should not occur: Don't find any etcFiles ???"
         exit 1
      fi
   done
fi

detectedDistro=`echo $detectedDistro | tr "[:upper:]" "[:lower:]"`

case $detectedDistro in
        suse)  detectedDistro="opensuse" ;;
        linux)  detectedDistro="linuxmint" ;;
esac

echo "Detected distro: $detectedDistro"
Zuletzt geändert von framp am 2. Jan 2010, 12:16, insgesamt 8-mal geändert.
Benutzeravatar
glako
Newbie
Newbie
Beiträge: 16
Registriert: 8. Nov 2008, 18:36
Wohnort: umme Ecke

Re: Auf welcher Linux Distro läuft ein Script?

Beitrag von glako »

Code: Alles auswählen

sojasau@horst ~/Scripte % ./distritest
Detected distro: arch
sojasau@horst ~/Scripte % uname -a
Linux horst 2.6.32-ARCH #1 SMP PREEMPT Sat Dec 26 09:02:58 CET 2009 x86_64 Intel(R) Core(TM)2 CPU T5600 @ 1.83GHz GenuineIntel GNU/Linux
Slackware folgt :)
Greetz
glako
Benutzeravatar
framp
Moderator
Moderator
Beiträge: 4321
Registriert: 6. Jun 2004, 20:57
Wohnort: bei Stuttgart
Kontaktdaten:

Re: Auf welcher Linux Distro läuft ein Script?

Beitrag von framp »

Klasse! Kannst Du bitte noch

Code: Alles auswählen

cat /etc/*[-_]{release,version} 
posten bzw lsb_release -d? Da sieht man dann die genaue Distro Version die ich in den Scriptheader reinschreiben kann . Aus uname -a sieht man leider nur die Kernelversion :-(
Benutzeravatar
glako
Newbie
Newbie
Beiträge: 16
Registriert: 8. Nov 2008, 18:36
Wohnort: umme Ecke

Re: Auf welcher Linux Distro läuft ein Script?

Beitrag von glako »

framp hat geschrieben:

Code: Alles auswählen

cat /etc/*[-_]{release,version} 

Code: Alles auswählen

16 sojasau@horst ~ % cat /etc/*[-_]{release,version} 
DISTRIB_ID=arch
cat: /etc/*[-_]version: Datei oder Verzeichnis nicht gefunden
Auch lsb_release -d in saemtlichen Variationen ergibt nix.
Es extistiert unter /etc zwar eine Datei Namens arch-release, ist aber leer.

Das einzige was ich bislang auf ein bestimmten Zeitpunkt zurueckfuehren konnte ist das:

Code: Alles auswählen

head -1 /var/log/pacman.log
Und ergibt bei mir:

Code: Alles auswählen

[2009-12-15 17:21] installed filesystem (2009.07-1)
Sprich, zu dem Zeitpunkt hab ich das System aufgesetzt.
Greetz
glako
Benutzeravatar
framp
Moderator
Moderator
Beiträge: 4321
Registriert: 6. Jun 2004, 20:57
Wohnort: bei Stuttgart
Kontaktdaten:

Re: Auf welcher Linux Distro läuft ein Script?

Beitrag von framp »

Hm ... ich dachte bei Arch gibt es auch sowas wie Versionen wie bei den anderen Distros :???: Anyhow - ich adde auch arch ohne Version zum Header als getestete Distro
Benutzeravatar
glako
Newbie
Newbie
Beiträge: 16
Registriert: 8. Nov 2008, 18:36
Wohnort: umme Ecke

Re: Auf welcher Linux Distro läuft ein Script?

Beitrag von glako »

Jein, Arch schmeisst zwischendurch mal einen Snapshot zum installieren raus. Siehe hier:
http://wiki.archlinux.org/index.php/FAQ ... be_made.3F

Bei Slackware erhalte ich uebrigens das hier:

Code: Alles auswählen

sojasau@zitrone ~/Scripte % ./distritest 
./distritest: line 20: syntax error in conditional expression: unexpected token `('
./distritest: line 20: syntax error near `Description:(['
./distritest: line 20: `   if [[ $lsbInfo =~ Description:([^ ]*) ]]; then'
2 sojasau@zitrone ~/Scripte %                                              
Mehrmals kopiert, auch von Arch rueber kopiert (wo es ja funktioniert).

Code: Alles auswählen

2 sojasau@zitrone ~/Scripte % cat /etc/*[-_]{release,version}                                                                                                                      :(
cat: /etc/*[-_]release: Datei oder Verzeichnis nicht gefunden
Slackware 13.0.0.0.0
Greetz
glako
Benutzeravatar
framp
Moderator
Moderator
Beiträge: 4321
Registriert: 6. Jun 2004, 20:57
Wohnort: bei Stuttgart
Kontaktdaten:

Re: Auf welcher Linux Distro läuft ein Script?

Beitrag von framp »

glako hat geschrieben:... Bei Slackware erhalte ich uebrigens das hier:

Code: Alles auswählen

sojasau@zitrone ~/Scripte % ./distritest 
./distritest: line 20: syntax error in conditional expression: unexpected token `('
./distritest: line 20: syntax error near `Description:(['
./distritest: line 20: `   if [[ $lsbInfo =~ Description:([^ ]*) ]]; then'
2 sojasau@zitrone ~/Scripte %                                              
Ich auch auf meinem VMWare image :o Dachte das ist irgendein Problem bei meiner Installation :???: Scheint so als hätte Slackware irgendwie Probleme mit RegExs in der bash.
Benutzeravatar
framp
Moderator
Moderator
Beiträge: 4321
Registriert: 6. Jun 2004, 20:57
Wohnort: bei Stuttgart
Kontaktdaten:

Re: Auf welcher Linux Distro läuft ein Script?

Beitrag von framp »

Wollte eben noch Mandriva verifizieren. Da die Installation nur nach Eingabe einer gültigen eMailAdresse :irre: fortgesetzt wird ist die Distro für mich gestorben. Vielleicht könnte ja jemand anderes mit Mandriva das Script checken...
Benutzeravatar
glako
Newbie
Newbie
Beiträge: 16
Registriert: 8. Nov 2008, 18:36
Wohnort: umme Ecke

Re: Auf welcher Linux Distro läuft ein Script?

Beitrag von glako »

Code: Alles auswählen

sojasau@localhost Dokumente]$ ./distritest
Detected distro: mandriva

Code: Alles auswählen

[sojasau@localhost Dokumente]$ cat /etc/*[-_]{release,version}
LSB_VERSION=lsb-3.1-ia32:lsb-3.1-noarch
DISTRIB_ID=MandrivaLinux
DISTRIB_RELEASE=2009.1
DISTRIB_CODENAME=pauillac
DISTRIB_DESCRIPTION="Mandriva Linux 2009.1"
Mandriva Linux release 2009.1 (Official) for i586
Mandriva Linux release 2009.1 (Official) for i586
Mandriva Linux release 2009.1 (Official) for i586
Mandriva Linux release 2009.1 (Official) for i586
cat: /etc/*[-_]version: Datei oder Verzeichnis nicht gefunden

Code: Alles auswählen

[sojasau@localhost Dokumente]$ lsb_release -d
Description:    Mandriva Linux 2009.1
[sojasau@localhost Dokumente]$
VBox sei Dank :)
Greetz
glako
Benutzeravatar
framp
Moderator
Moderator
Beiträge: 4321
Registriert: 6. Jun 2004, 20:57
Wohnort: bei Stuttgart
Kontaktdaten:

Re: Auf welcher Linux Distro läuft ein Script?

Beitrag von framp »

framp hat geschrieben:
glako hat geschrieben:... Bei Slackware erhalte ich uebrigens das hier:

Code: Alles auswählen

sojasau@zitrone ~/Scripte % ./distritest 
./distritest: line 20: syntax error in conditional expression: unexpected token `('
./distritest: line 20: syntax error near `Description:(['
./distritest: line 20: `   if [[ $lsbInfo =~ Description:([^ ]*) ]]; then'
2 sojasau@zitrone ~/Scripte %                                              
Ich auch auf meinem VMWare image :o Dachte das ist irgendein Problem bei meiner Installation :???: Scheint so als hätte Slackware irgendwie Probleme mit RegExs in der bash.
Nachdem ich den regulären Ausdruck aus dem if in eine Variable ausgelagert habe funktioniert es auch unter Slackware :schockiert: - warum auch immer :???:
Benutzeravatar
blacklips
Hacker
Hacker
Beiträge: 448
Registriert: 28. Nov 2006, 19:33
Wohnort: gießen, frankfurt

Re: Auf welcher Linux Distro läuft ein Script?

Beitrag von blacklips »

Fedora 12 läuft hier gar nicht:

Code: Alles auswählen

./distrocheck 
??? Should not occur: Don't find any etcFiles ???
Linux: Xfce 4.6
Benutzeravatar
glako
Newbie
Newbie
Beiträge: 16
Registriert: 8. Nov 2008, 18:36
Wohnort: umme Ecke

Re: Auf welcher Linux Distro läuft ein Script?

Beitrag von glako »

blacklips hat geschrieben:Fedora 12 läuft hier gar nicht:

Code: Alles auswählen

./distrocheck 
??? Should not occur: Don't find any etcFiles ???
Genau das kommt hier jetzt auch mit Slackware. :(
Greetz
glako
Benutzeravatar
framp
Moderator
Moderator
Beiträge: 4321
Registriert: 6. Jun 2004, 20:57
Wohnort: bei Stuttgart
Kontaktdaten:

Re: Auf welcher Linux Distro läuft ein Script?

Beitrag von framp »

glako hat geschrieben:
blacklips hat geschrieben:Fedora 12 läuft hier gar nicht:

Code: Alles auswählen

./distrocheck 
??? Should not occur: Don't find any etcFiles ???
Genau das kommt hier jetzt auch mit Slackware. :(
:ops: :ops: :ops: Gab einen kleinen Typo im Script hier im Thread. Bei mir lokal allerdings nicht. :ops: :ops: :ops:

Code: Alles auswählen

33c33
<       if [[ $file =~ $regExpLsbFile ]]; then
---
>       if [[ $lsbInfo =~ $regExpLsbFile ]]; then
Ist jetzt oben korrigiert.
Antworten