我有一个设备/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
在 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")"'