2016-07-18 6 views
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 
+0

のために完璧に動作します入力がファイルの終わりを示すまで入力します。その兆候が決して生成されない場合、それは永遠に追加の入力を待って喜んでそこに座ります。基本的に、それは設計どおりに動作しています。限られた量のデータを読みたいなら、おそらく 'dd'が' cat'よりも良いでしょう... – twalberg

+0

ありがとう 私はその実現に向っていますが、 'dd'は私のアプリケーションでは役に立たない私は何バイト読み込んでいるのかわからない、後でログメッセージが出るかもしれない –

答えて

0

それとも私が見つけた最も簡単な解決策はただtimeout XX catを使用していた、それは `cat`はそのから読み込みます私のアプリケーション

関連する問題