Цикл по файлам и извлечение значения из имени файла. Скрипт не работает

Цикл по файлам и извлечение значения из имени файла. Скрипт не работает

Почему при выполнении следующего скрипта возникает ошибка «Отказано в доступе»:

#!/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

Я ожидал, что $number будет содержать значение «digit» пути /sys/class/rc/rc[0-2], вместо этого команда «echo», похоже, попытается выполнить команду cat для файла /sys/class/rc/rc[0-2].

В частности, если существует /sys/class/rc/rc1/device/driver/pwm-ir-transmitter, вывод

lircprobe pwm-ir-передатчик

является:

/usr/local/sbin/lircprobe: 10: /usr/local/sbin/lircprobe: /sys/class/rc/rc1: Отказано в доступе

(lircprobe — это имя скрипта, указанного выше)

решение1

Что-то я вижу сразу:
number=echo $i | sed 's%/sys/class/rc/rc([0-9]+)%$0%' оболочка не знает, что нужно выполнить это как команду и сохранить вывод в переменной number. Попробуйте это вместо этого: или
number=`echo $i | sed 's%/sys/class/rc/rc([0-9]+)%$0%' `

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

Связанный контент