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

У меня есть устройство в / 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:
0
задан 16 August 2020 в 18:54

1 ответ

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")"'
2
ответ дан 21 August 2020 в 07:58

Другие вопросы по тегам:

Похожие вопросы: