파일을 반복하고 파일 이름의 값을 추출합니다. 스크립트가 작동하지 않습니다

파일을 반복하고 파일 이름의 값을 추출합니다. 스크립트가 작동하지 않습니다

다음 스크립트에서 "권한 거부" 오류가 발생하는 이유는 무엇입니까?

#!/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/ 파일을 cat하려고 시도하는 것 같습니다. 클래스/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=`echo $i | sed 's%/sys/class/rc/rc([0-9]+)%$0%' `

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

관련 정보