Eu tenho um dispositivo em /sys/bus/iio/devices/iio:device0/
e o dispositivo tem muitos arquivos como in_current0_raw
, in_current0_mean_raw
, in_current0_scale
... Quero imprimi-los periodicamente no terminal. O que tentei não está funcionando:
#!/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"
Ele imprime:
%4.10f :in :cat :/sys/bus/iio/devices/iio:device0/in_current0_mean_raw:
Responder1
O watch
executa comandos em um shell, então você precisa citar as coisas duas vezes ou usar a -x
opção (se não estiver confiando na sintaxe do shell). No entanto, parece que você deseja executar cat ...
periodicamente e usar sua saída como argumento para printf
; nesse caso, você deve usarsubstituição de comando. Isso significa que você não pode usar -x
, mas em vez disso terá que colocar aspas simples na substituição do comando para o shell externo e deixar watch
a invocação do shell cuidar disso. Algo como:
watch 'printf "%-20s: %4.10f" "in_current0_raw" "$(cat "${DEVICE_PATH}/in_current0_raw")"'
No entanto, isso significa que DEVICE_PATH
será expandido por um shell diferente, portanto deve ser exportado antes de você executar watch
:
export DEVICE_PATH
watch 'printf "%-20s: %4.10f" "in_current0_raw" "$(cat "${DEVICE_PATH}/in_current0_raw")"'