Ich habe ein Gerät in /sys/bus/iio/devices/iio:device0/
und das Gerät hat viele Dateien wie in_current0_raw
, in_current0_mean_raw
, in_current0_scale
... Ich möchte sie regelmäßig im Terminal ausdrucken. Was ich versucht habe, funktioniert nicht:
#!/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"
Es druckt:
%4.10f :in :cat :/sys/bus/iio/devices/iio:device0/in_current0_mean_raw:
Antwort1
Das watch
führt Befehle in einer Shell aus, daher müssen Sie Dinge zweimal in Anführungszeichen setzen oder den Schalter verwenden (wenn Sie sich nicht auf die Shell-Syntax verlassen). Es sieht jedoch so aus, als ob Sie es regelmäßig ausführen und seine Ausgabe als Argument für verwenden -x
möchten. In diesem Fall sollten Sie verwendencat ...
printf
BefehlsersetzungDas bedeutet, dass Sie nicht verwenden können -x
, sondern diesen Befehlsersatz für die äußere Shell in einfache Anführungszeichen setzen müssen und watch
den Aufruf der Shell dies erledigen lassen müssen. Etwa so:
watch 'printf "%-20s: %4.10f" "in_current0_raw" "$(cat "${DEVICE_PATH}/in_current0_raw")"'
Dies bedeutet jedoch, dass es DEVICE_PATH
durch eine andere Shell erweitert wird. Es sollte daher exportiert werden, bevor Sie Folgendes ausführen watch
:
export DEVICE_PATH
watch 'printf "%-20s: %4.10f" "in_current0_raw" "$(cat "${DEVICE_PATH}/in_current0_raw")"'