Wie kann ich mehr als eine Datei formatieren und drucken?

Wie kann ich mehr als eine Datei formatieren und drucken?

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 watchfü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 -xmöchten. In diesem Fall sollten Sie verwendencat ...printfBefehlsersetzungDas 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 watchden 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_PATHdurch 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")"'

verwandte Informationen