Substituição de comando aninhado no Bash não funciona

3

Oi eu tenho um script bash que pretendem ser executado via watch ./script.sh

É para depurar um problema de resfriamento com meu laptop, no entanto, o script que eu escrevi não está funcionando como pretendido. Eu sou muito novo no bash scripting, então tenho certeza que é algo simples.

Eu tenho uma linha no meu script que tem uma substituição de comando aninhada, mas o comando interno não parece funcionar ou pelo menos parece que o comando interno não sabe o valor de $i . Qualquer ajuda apreciada.

aqui está o script:

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

e aqui está a saída:

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:
    
por 0x7c0 16.07.2013 / 22:53

1 resposta

3

O erro mais óbvio que posso ver é que você não está protegendo a variável de loop i . Então, quando você escreve $i_trip_point , o shell está procurando por uma variável chamada i_trip_point , que não está configurada para que você obtenha o segundo tipo de erro, como este, por exemplo:

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

Dois sublinhados entre point e temp , que marcam uma variável vazia sendo interpolada. Você deve usar a sintaxe ${i}_trip_point . As chaves protegem sua variável contra caracteres adjacentes sendo interpretados como parte do nome da variável.

    
por 16.07.2013 / 22:58