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