둘 이상의 파일을 포맷하여 분류하고 인쇄하는 방법은 무엇입니까?

둘 이상의 파일을 포맷하여 분류하고 인쇄하는 방법은 무엇입니까?

에 장치가 있고 장치에 , , ... /sys/bus/iio/devices/iio:device0/등의 파일이 많이 있습니다. 터미널에서 주기적으로 인쇄하고 싶습니다. 내가 시도한 것이 작동하지 않습니다.in_current0_rawin_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"

다음과 같이 인쇄됩니다.

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

답변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")"'

관련 정보