0
私は組み込みデバイスにシリアルコマンドを送信し、テスト自動化のための応答を得ようとしています。私はcatを次のコードとして使用しようとしましたが、catコマンドでスタックしてしまいます。解決策はthis linkに掲載されています。私は、コマンドを送信し、返信を受信し、応答を非ブロックで何かをしたい。たぶん、BashはCのSelect()と似ていますか?誰もが、私は非常にそれを感謝し、よりエレガントな解決策を持っている場合:)シリアル受信時に猫がついてしまいますか?
#!/bin/bash
#tty=/dev/tps21
stty -F /dev/tps21 speed 38400 cs8 cread clocal -cstopb -parenb >> /dev/null
echo 1
echo 'loglevel off' > /dev/tps21
echo 2
cat </dev/tps21>> /dev/null #Gets stuck here
echo 3
echo 'shell <username> <password> /opt/tools/eeprom/read.sh wifi_apn' > /dev/tps21
echo 4
echo 5
apn_raw="$(cat < /dev/tps21)" #Gets Stuck here
echo 6
apn="$(echo "$apn_raw" | sed -n 3p)"
echo 7
echo "${apn}"
echo 8
echo 'shell <username> <password> /opt/tools/eeprom/read.sh wifi_pass' > /dev/tps21
pass_raw="$(cat -v < /dev/tps21)" #Gets Stuck here
pass="$(echo "$pass_raw" | sed -n 3p)"
echo "${pass}"
nmcli --nocheck d $apn connect $apn password $pass iface wlan0
のために完璧に動作します入力がファイルの終わりを示すまで入力します。その兆候が決して生成されない場合、それは永遠に追加の入力を待って喜んでそこに座ります。基本的に、それは設計どおりに動作しています。限られた量のデータを読みたいなら、おそらく 'dd'が' cat'よりも良いでしょう... – twalberg
ありがとう 私はその実現に向っていますが、 'dd'は私のアプリケーションでは役に立たない私は何バイト読み込んでいるのかわからない、後でログメッセージが出るかもしれない –