
こんにちは。実行するbashスクリプトがあります。watch ./script.sh
ノートブックの冷却問題をデバッグするためのものでしたが、私が書いたスクリプトは期待どおりに機能しませんでした。私はbashスクリプトに初めて触れたので、簡単だと確信しています。
私のスクリプトに入れ子になったコマンド置換がある行がありますが、内部コマンドが機能していないように見えるか、少なくとも内部コマンドが値を知らないようです$i
。助けてくれてありがとう。
スクリプトは次のとおりです。
echo "THERMAL ZONE 2:"
echo "Cur Temp: $(cat /sys/class/thermal/thermal_zone2/temp)"
for i in {2..7}
do
echo "cooling_device$i STATE: $(cat /sys/class/thermal/thermal_zone2/cdev$i/cur_state) TRIP POINT TEMP: $(cat /sys/class/thermal/thermal_zone2/trip_point_$(cat /sys/class/thermal/thermal_zone2/cdev$i_trip_point)_temp)"
done
出力は次のとおりです。
THERMAL ZONE 2:
Cur Temp: 43000
cat: /sys/class/thermal/thermal_zone2/cdev: No such file or directory
cat: /sys/class/thermal/thermal_zone2/trip_point__temp: No such file or directory
cooling_device2 STATE: 1 TRIP POINT TEMP:
cat: /sys/class/thermal/thermal_zone2/cdev: No such file or directory
cat: /sys/class/thermal/thermal_zone2/trip_point__temp: No such file or directory
cooling_device3 STATE: 1 TRIP POINT TEMP:
cat: /sys/class/thermal/thermal_zone2/cdev: No such file or directory
cat: /sys/class/thermal/thermal_zone2/trip_point__temp: No such file or directory
cooling_device4 STATE: 0 TRIP POINT TEMP:
cat: /sys/class/thermal/thermal_zone2/cdev: No such file or directory
cat: /sys/class/thermal/thermal_zone2/trip_point__temp: No such file or directory
cooling_device5 STATE: 0 TRIP POINT TEMP:
cat: /sys/class/thermal/thermal_zone2/cdev: No such file or directory
cat: /sys/class/thermal/thermal_zone2/trip_point__temp: No such file or directory
cooling_device6 STATE: 0 TRIP POINT TEMP:
cat: /sys/class/thermal/thermal_zone2/cdev: No such file or directory
cat: /sys/class/thermal/thermal_zone2/trip_point__temp: No such file or directory
cooling_device7 STATE: 0 TRIP POINT TEMP:
答え1
私が見た最も明白な間違いは、i
ループ変数を保護しないことです。そのため、作成時にシェルは未設定の$i_trip_point
変数を探しているため、2番目の型のエラーが発生します。たとえば、次のようになります。i_trip_point
cat: /sys/class/thermal/thermal_zone2/trip_point__temp: No such file or directory
point
間にある2つの下線は、挿入される空のtemp
変数を示します。構文を使用する必要があります${i}_trip_point
。中括弧は、変数名の一部として解釈される隣接する文字から変数を保護します。