webdino / pizero-workshop

Raspberry Pi によるプログラミングレス IoT
https://tottori-iot.netlify.com/
2 stars 0 forks source link

wifi.txt ファイル末尾に改行がないと最終行が無視される #17

Closed dynamis closed 5 years ago

dynamis commented 5 years ago

wifi 設定が複数されていないケースが多かったのを不審に思いコード見たのですが、単なる while read $line ループしているので行末に改行文字がない行が無視されます (read は改行含まないと false 返します)。

https://github.com/webdino/pizero-workshop/blob/master/setup.sh#L84

memo: バグのあるコード (手元の mac での試験用に単純化)

    cat wifi.txt | while read _LINE; do
        if echo $_LINE | grep -q '^\s*$'; then continue; fi #skip empty line
        echo $_LINE | awk -F ',' '{print "wpa_passphrase \"" $1 "\" \"" $2 "\""}'
        priority=$(( $priority + 1 ))
    done

意図したとおりに動く例:

    cat wifi.txt | while read _LINE || [ -n "${_LINE}" ]; do
        if echo $_LINE | grep -q '^\s*$'; then continue; fi #skip empty line
        echo $_LINE | awk -F ',' '{print "wpa_passphrase \"" $1 "\" \"" $2 "\""}'
        priority=$(( $priority + 1 ))
    done

入力テストファイルと関数呼び出しの結果のテストコードが必要と言いたいところですが、ひとまずバグは修正しましょう。テスト入力ファイルは末尾改行自動付与しないエディタで作って下さいね。

もちろん、wpa_supplicant 編集コードだけでなくフォーマット確認も同じく、その他の read しているコードも同じくです。

kou029w commented 5 years ago

jsに移行したためクローズ https://webdino.github.io/pizero-workshop/ForDevelopers/pizero-workshopForDevelopers.html https://webdino.github.io/pizero-workshop/Workshop.html