PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : awk: Vergleich mit einer Shell-Variablen unmöglich?



nobody0
17-09-2005, 10:22
Um die Major-Nummer von einem Device auszulesen benutze ich den awk:

MAJOR=`cat /proc/devices | awk '$2=="pci_chrdev_template" { print $1 }'`

Damit der Name des Devices aber nur einmal im Skript definiert werden muss, soll der Vergleich mit einer Shell-Variablen durchgeführt werden:

# device driver name
DEVICE_NAME=pci_chrdev_template
...
MAJOR=`cat /proc/devices | awk '$2=="$DEVICE_NAME" { print $1 }'`

aber das funktioniert nicht, da die einfachen Anführungsstriche das Einsetzen der Shell-Variablen in $DEVICE_NAME verhindern.
Irgendwelche Vorschläge? :confused:

michael.sprick
17-09-2005, 10:41
ich kann das jetzt hier gerade nicht testen, aber was auf jeden Fall funktionieren müsste, ist:



MAJOR=`cat /proc/devices | awk -v dev=$DEVICE_NAME '$2==dev { print $1 }'


ansonsten kannst Du ja einfach noch ein grep dazwischen bauen...

peschmae
17-09-2005, 10:41
Zugriff auf Environment-Variablen aus AWK geht so:
ENVIRON["VARIABLENAME"]

oder du könntest auch was in der Richtung von dem da versuchen:
MAJOR=`cat /proc/devices | awk '$2=='$DEVICE_NAME' { print $1 }'`

MfG Peschmä

nobody0
17-09-2005, 15:06
Danke, ich habe die Version aus der ersten Antwort debugt und nun diese Version:

> MAJOR=`cat /proc/devices | awk -v dev=$DEVICE_NAME '$2==dev { print $1 }'`
> echo $MAJOR
253

Allerdings reicht das genau genommen nicht ganz, denn wenn mehrere Devices gleichen Namens vorhanden sind, scheitert das nachfolgende mknod.
Ich baue deshalb noch die Zählschleife

for n in $MAJOR ; do
...

ein.