次のスクリプトで「アクセスが拒否されました」というエラーが発生するのはなぜですか?
#!/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] の「digit」値が含まれることですが、代わりに、「echo」コマンドはファイル /sys/class/rc/rc[0-2] を cat しようとしているようです。
特に、/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%' )