Anzeige:
Ergebnis 1 bis 4 von 4

Thema: awk: Vergleich mit einer Shell-Variablen unmöglich?

  1. #1
    Registrierter Benutzer
    Registriert seit
    22.03.2001
    Beiträge
    650

    Question awk: Vergleich mit einer Shell-Variablen unmöglich?

    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?

  2. #2
    Registrierter Benutzer
    Registriert seit
    19.08.2004
    Beiträge
    404
    ich kann das jetzt hier gerade nicht testen, aber was auf jeden Fall funktionieren müsste, ist:

    Code:
    MAJOR=`cat /proc/devices | awk -v dev=$DEVICE_NAME '$2==dev { print $1 }'
    ansonsten kannst Du ja einfach noch ein grep dazwischen bauen...

  3. #3
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    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ä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  4. #4
    Registrierter Benutzer
    Registriert seit
    22.03.2001
    Beiträge
    650
    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.
    Geändert von nobody0 (17-09-2005 um 15:14 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •