複数のファイルをフォーマットして cat して印刷するにはどうすればよいでしょうか?

複数のファイルをフォーマットして cat して印刷するにはどうすればよいでしょうか?

にデバイスがあり、デバイスには、、、 .../sys/bus/iio/devices/iio:device0/などの多くのファイルがあります。それらをターミナルで定期的に印刷したいのですが、試したことはうまくいきません:in_current0_rawin_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シェル内でコマンドを実行するため、引用符を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")"'

関連情報