Read pipen...

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
KingBonecrusher
Beiträge: 375
Registriert: 07.06.2005 09:48:43

Read pipen...

Beitrag von KingBonecrusher » 31.01.2007 07:08:15

Gibts ne Möglichkeit Daten aus ner pipe an read zu senden? Sollte ja eigentlich wegen der Eltern-Kind Vererbung nicht klappen, was es auch nicht macht.

Mein Script:
========

Code: Alles auswählen

....
IFS=": "
....
function READ_PROC
{
grep -i "model name" /etc/cpuinfo | read -a CPUINFO
}
....
function PRINT_PROC
{
echo ${CPUINFO[1]}
}
...
Ich würde das gerne mit read erledigen, da die bash prima Variablen zerlegen kann!
Zuletzt geändert von KingBonecrusher am 31.01.2007 21:58:22, insgesamt 1-mal geändert.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 31.01.2007 09:38:34

ja, zum Beispiel:

Code: Alles auswählen

gms@gms4:~$ cat x.sh
#!/bin/bash

function READ_PROC
{
  grep -i "model name" /proc/cpuinfo | { IFS=":" read prefix model && echo $model; }
}

READ_PROC
gms@gms4:~$ ./x.sh
Intel(R) Pentium(R) D CPU 3.00GHz

Gruß
gms

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 31.01.2007 12:24:29

Aber sowas geht doch, meiner Meinung nach, einfacher mit cut oder awk.

Ok, man erhält dann am Anfang der Zeile noch ein Leerzeichen, welches man dann z.B. noch mit sed oder so entfernen müsste.
Oh, yeah!

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 31.01.2007 12:51:40

Duff hat geschrieben:Aber sowas geht doch, meiner Meinung nach, einfacher mit cut oder awk.
Ok, man erhält dann am Anfang der Zeile noch ein Leerzeichen, welches man dann z.B. noch mit sed oder so entfernen müsste.
wenn du awk verwenden möchtest, brauchst du kein sed:

Code: Alles auswählen

awk -F: '$1~/model name/{ sub(/^ +/,"",$2);print $2}' /proc/cpuinfo
Intel(R) Pentium(R) D CPU 3.00GHz
umgekehrt brauchst du auch kein awk, wenn du sed verwenden möchtest:

Code: Alles auswählen

sed -ne 's/^.*model name.*: *\(.*\)$/\1/p' /proc/cpuinfo
Gruß
gms

KingBonecrusher
Beiträge: 375
Registriert: 07.06.2005 09:48:43

Beitrag von KingBonecrusher » 31.01.2007 16:06:48

Danke erstmal...

Hat gut geklappt. Gibt auch eine Möglichkeit die Variablen auch weiter zu nutzen? Ausserhalb der Funktion? Wenn ich die später wieder verwenden will?

Code: Alles auswählen

!/bin/bash

function READ_PROC
{
  grep -i "model name" /proc/cpuinfo | { IFS=":" read prefix model && echo $model; }
}

READ_PROC 

-> echo $model

Ist das Möglich? Bin noch neu im Scripten. Meint Ihr mit einer Funktion ist das eleganter gelöst?

Mein Ziel war es eben sowas wie ein PC-Info-Script zu machen. Aus Neugierde. Aber ich sehe schon, mit Funktionen geht das wohl besser.

Ist es möglich überhaupt Daten in eine Sysweite Variable zu pipen mit read?

mfg

KingBonecrusher
Beiträge: 375
Registriert: 07.06.2005 09:48:43

Beitrag von KingBonecrusher » 31.01.2007 21:09:42

Ok, es klappt so

Code: Alles auswählen

VARIABLE = 'READ_PROC'

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 01.02.2007 09:34:33

@gms: ...hast ja Recht...

:wink:
Oh, yeah!

Antworten