Как отформатировать и распечатать более одного файла?

Как отформатировать и распечатать более одного файла?

У меня есть устройство в /sys/bus/iio/devices/iio:device0/, и на устройстве много файлов, таких как in_current0_raw, 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"

Он печатает:

%4.10f              :in                  :cat                 :/sys/bus/iio/devices/iio:device0/in_current0_mean_raw:

решение1

Запускает watchкоманды в оболочке, поэтому вам нужно дважды заключать их в кавычки или использовать -xswitch (если вы не полагаетесь на синтаксис оболочки). Однако, похоже, вы хотите запускать cat ...периодически и использовать его вывод в качестве аргумента для printf, в этом случае вам следует использоватьзамена команды. Это значит, что вы не можете использовать -x, но вместо этого вам придется заключить эту подстановку команды в одинарные кавычки для внешней оболочки, и пусть watchвызов оболочки позаботится об этом. Что-то вроде:

watch 'printf "%-20s: %4.10f" "in_current0_raw" "$(cat "${DEVICE_PATH}/in_current0_raw")"'

Однако это означает, что он DEVICE_PATHбудет расширен другой оболочкой, поэтому его следует экспортировать перед запуском watch:

export DEVICE_PATH
watch 'printf "%-20s: %4.10f" "in_current0_raw" "$(cat "${DEVICE_PATH}/in_current0_raw")"'

Связанный контент