1

Munin を使用して、データの波を表示したいと考えています。ttyACM0 からデータを取得します。これは Arduino UNO です。シェルスクリプトを使用しています。しかし、問題が発生しました。「cat /dev/ttyACM0」を使用してデータを取得できません。ここに問題があります。プログラムは「cat /dev/ttyACM0」で停止しました。

+ . /usr/share/munin/plugins/plugin.sh
+ '[' '' = autoconf ']'
+ '[' '' = config ']'
++ cat /dev/ttyACM0

別の問題が発生する場合もあります。それは、'LINE = $(cat /dev/ttyACM0 | awk -F: '{print $2}')' コマンドが見つからないことです。誰にもアイデアがありますか?どうもありがとう。

ここに私のコードの一部があります、

if [ "$1" = "config" ]; then
    echo 'graph_title Temperature of board'
    echo 'graph_args --base 1000 -l 0'
    echo 'graph_vlabel temperature(°C)'
    echo 'graph_category temperature'
    echo 'graph_scale no'
    echo 'graph_period second'
    echo 'graph_info This graph shows the temperature of board'
    LINE = $(cat /dev/ttyACM0 | awk -F: '{print $2}')

    for i in 0 1 2 3 4; do
        case $i in
            1)
            TYPE="Under PCB"
            ;;
            2)
            TYPE="HDD"
            ;;
            3)
            TYPE="PHY"
            ;;
            4)
            TYPE="CPU"
            ;;
            5)
            TYPE="Ambience"
            ;;
        esac
        name=$(clean_name $TYPE)
        if ["$TYPE" != "NA"]; then 
            echo "temp_$name.label $TYPE";
        fi
    done
    exit 0
 fi

LINE = $(cat /dev/ttyACM0 | awk -F: '{print $2}')
for i in 0 1 2 3 4; do
    case $i in
        1)
        TYPE="Under PCB"
        VALUE=$(echo "$LINE" | awk '{print $1}')
        ;;
        2)
        TYPE="HDD"
        VALUE=$(echo "$LINE" | awk '{print $2}')
        ;;
        3)
        TYPE="PHY"
        VALUE=$(echo "$LINE" | awk '{print $3}')
        ;;
        4)
        TYPE="CPU"
        VALUE=$(echo "$LINE" | awk '{print $4}')
        ;;
        5)
        TYPE="Ambience"
        VALUE=$(echo "$LINE" | awk '{print $5}')
        ;;
    esac

    name=$(clean_name $TYPE)
    if ["$TYPE" != "NA"]; then
        echo "temp_$name.value $VALUE";
    fi
done
4

2 に答える 2

2

=記号の両側のスペースを削除します。変数の代入では許可されていません。

次のように変更します。

LINE=$(cat /dev/ttyACM0 | awk -F: '{print $2}')
于 2012-09-26T15:03:49.810 に答える
2

LINE エラーの問題は、「=」文字の前後にスペースがあることです。である必要がありますLINE=...

/dev/ttyACM0が EOF を示さないデバイスである場合、それはさらに読み取るのawkを待ち、 は決して来ない EOF を待ちます。正確には何/dev/ttyACM0を生み出すと予想されますか?cat /dev/ttyACM0コンソールに入力するとどうなりますか?

さらに、cat の無駄な使用に注意してください。より良い使用

LINE=$(awk -F: '{print $2}' /dev/ttyACM0)

if ["$TYPE" != "NA"]; thenそして、それが読めるようにスペースを追加する必要があります

if [ "$TYPE" != "NA" ]; then
于 2012-09-26T15:04:17.200 に答える