Como cat e print formatado mais de um arquivo?

Como cat e print formatado mais de um arquivo?

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 watchexecuta comandos em um shell, então você precisa citar as coisas duas vezes ou usar a -xopçã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 watcha 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_PATHserá 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")"'

informação relacionada