にデバイスがあり、デバイスには、、、 .../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
シェル内でコマンドを実行するため、引用符を2回付けるか、スイッチを使用する必要があります(シェル構文に依存していない場合)。ただし、定期的に実行し、その出力を の引数として使用したい場合は、-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")"'