Durchlaufe Dateien und extrahiere Werte im Dateinamen. Skript funktioniert nicht

Durchlaufe Dateien und extrahiere Werte im Dateinamen. Skript funktioniert nicht

Warum erhalte ich bei folgendem Skript die Fehlermeldung „Zugriff verweigert“:

#!/bin/sh

if [ -z $1 ]; then
    echo "no argument given"
    exit 1
fi

for i in /sys/class/rc/rc*; do
    if [ -e "$i/device/driver/$1" ]; then
      number=echo $i | sed 's%/sys/class/rc/rc([0-9]+)%$0%'
      echo "found $number"
    fi
done

Ich würde erwarten, dass $number den „Ziffern“-Wert des Pfads /sys/class/rc/rc[0-2] enthält. Stattdessen scheint der Befehl „echo“ zu versuchen, die Datei /sys/class/rc/rc[0-2] zu caten.

Insbesondere wenn /sys/class/rc/rc1/device/driver/pwm-ir-transmitter vorhanden ist, die Ausgabe von

lircprobe PWM-IR-Sender

Ist:

/usr/local/sbin/lircprobe: 10: /usr/local/sbin/lircprobe: /sys/class/rc/rc1: Berechtigung verweigert

(lircprobe ist der Name des oben stehenden Skripts)

Antwort1

Was mir sofort auffällt:
number=echo $i | sed 's%/sys/class/rc/rc([0-9]+)%$0%' Die Shell weiß nicht, wie sie das als Befehl ausführen und die Ausgabe in der Variablen Nummer speichern soll. Versuchen Sie stattdessen Folgendes: oder
number=`echo $i | sed 's%/sys/class/rc/rc([0-9]+)%$0%' `

number=$( echo $i | sed 's%/sys/class/rc/rc([0-9]+)%$0%' )

verwandte Informationen