У меня есть устройство в /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
команды в оболочке, поэтому вам нужно дважды заключать их в кавычки или использовать -x
switch (если вы не полагаетесь на синтаксис оболочки). Однако, похоже, вы хотите запускать 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")"'