ファイルを繰り返し、ファイル名の値を抽出します。スクリプトが機能しません

ファイルを繰り返し、ファイル名の値を抽出します。スクリプトが機能しません

次のスクリプトを使用すると「許可拒否」エラーが発生するのはなぜですか?

#!/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に/sys/class/rc/rc[0-2]パスの「数値」値が含まれていることでした。代わりに、「echo」コマンドが/sys/class/ファイルをキャプチャしようとしたようです。 rc/rc[0-2 ]。

特に、/sys/class/rc/rc1/device/driver/pwm-ir-transmitter が存在する場合に出力されます。

lircprobe PWM赤外線送信機

例:

/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=`echo $i | sed 's%/sys/class/rc/rc([0-9]+)%$0%' `

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

関連情報