¿Cómo cat e imprimir formateado más de un archivo?

¿Cómo cat e imprimir formateado más de un archivo?

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_rawin_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 watchcomandos en un shell, por lo que debe citar las cosas dos veces o usar el -xmodificador (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 watchinvocació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_PATHse 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")"'

información relacionada