Tengo un dispositivo en y el /sys/bus/iio/devices/iio:device0/
dispositivo tiene muchos archivos como in_current0_raw
,, ... Quiero imprimirlos periódicamente en la terminal. Lo que probé no funciona:in_current0_mean_raw
in_current0_scale
#!/bin/bash
DEVICE_PATH=/sys/bus/iio/devices/iio:device0/
CMD=$(cat ${DEVICE_PATH}in_current0_raw)
watch -n 1 printf '%-20s: %4.10f' "in_current0_raw" "cat ${DEVICE_PATH}in_current0_raw"
Imprime:
%4.10f :in :cat :/sys/bus/iio/devices/iio:device0/in_current0_mean_raw:
Respuesta1
Ejecuta watch
comandos en un shell, por lo que debe citar las cosas dos veces o usar el -x
modificador (si no confía en la sintaxis del shell). Sin embargo, parece que desea ejecutar cat ...
periódicamente y utilizar su salida como argumento printf
, en cuyo caso debería utilizarsustitución de comando. Eso significa que no puede usar -x
, sino que tendrá que usar comillas simples para sustituir el comando por el shell externo, y la watch
invocación del shell se encargará de ello. Algo como:
watch 'printf "%-20s: %4.10f" "in_current0_raw" "$(cat "${DEVICE_PATH}/in_current0_raw")"'
Sin embargo, esto significa que DEVICE_PATH
se expandirá mediante un shell diferente, por lo que se debe exportar antes de ejecutar watch
:
export DEVICE_PATH
watch 'printf "%-20s: %4.10f" "in_current0_raw" "$(cat "${DEVICE_PATH}/in_current0_raw")"'