如何 cat 并打印格式化的多个文件?

如何 cat 并打印格式化的多个文件?

我有一个设备/sys/bus/iio/devices/iio:device0/,该设备有很多文件,例如,,in_current0_raw...我想在终端中定期打印它们。我尝试的方法不起作用:in_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在 shell 中运行命令,因此您需要引用两次,或者使用开关(-x如果您不依赖 shell 语法)。但是,看起来您想cat ...定期运行并将其输出用作 的参数printf,在这种情况下您应该使用命令替换。这意味着您不能使用-x,而是必须用单引号将该命令替换为外壳,然后让watch外壳的调用来处理它。类似于:

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

但是,这意味着DEVICE_PATH将由不同的 shell 扩展,因此应该在运行之前将其导出watch

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

相关内容