Bash 嵌套命令替换不起作用

Bash 嵌套命令替换不起作用

你好,我有一个 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,shell 正在寻找名为 的变量i_trip_point,该变量未设置,因此您会收到第二种类型的错误,例如:

cat: /sys/class/thermal/thermal_zone2/trip_point__temp: No such file or directory

point和之间的两个下划线标记temp正在插入的空变量。您应该使用语法${i}_trip_point。大括号可保护您的变量,避免相邻字符被解释为变量名称的一部分。

相关内容