2012-02-15 8 views
2

私はすでに同様の質問を投稿しましたが、まだ完了していません。私のつまずくブロックをより明確に述べる。モデムにATコマンドを送信するADBシェルスクリプト - シェルに制御を戻せず、出力をキャプチャすることはできません

私は基本的にAndroidの携帯電話のadbシェルにあり、ATコマンドを送信してGPRSモデムと通信しています。 私はモデムを表すデバイスファイルにコマンドでリダイレクトすることでそれを行うことができます。バックグラウンドで実行されているcatユーティリティーを使用して応答を返すことができます(先に開始しました)。私はスクリプトで実装しました これは、1つのATコマンドを送信し、応答を読み取ることができます。たとえば、次のスクリプトは 宛に+ copsに送信されますか?モバイルが上キャンプされるオペレータの名前を取得するために、次のように

#SendATCommand script 
cat /dev/pts/7 & 
echo -e at+cops?\\r > /dev/pts/7 

を出力になります。

  1. 私は:今ここ

    # ./sendATCommand 
    ./sendATCommand 
    # 
    +COPS: 0,0,"AT&T",6 
    
    OK 
    /dev/pts/7: invalid length 
    

    は私が解決できない二つの問題がありますまだadbシェルプロンプト "#"を取得するために手動でENTERボタンを押す必要があります。プログラムで "#"プロンプトに を返す方法はありますか?再び、私はadbシェルです。

  2. 表示された応答は変数でもファイルでもキャプチャできません((#/ sendATCommand> output.txt)Output.txtファイルは空になりますさまざまなリダイレクトを試みましたが、まだ取得できませんでしたそれは動作します。

は、誰も私が(今までに可能な場合)、これら二つの問題を解決する助けてくださいことはできますか?最終的に私はこの小さなスクリプトは、PC上で実行されている「スーパー」のスクリプト(例えばPerlやPowerShellの)から呼び出さ になりたいです私のAndroid搭載端末は に接続されていますが、2つの問題が解決されるまでは実行できません。

+0

なぜあなたは '\\ r'を持っていますか? '\ r'だけでなく、' \ n'を試してください。あるいはもっと一般的に '\ r'が関わっているときは' \ r \ n'です。なぜあなたは「無効な長さ」のメッセージを受け取っていると思いますか?アンドロイドの人ではないので、これは私が提供しなければならないすべてのものです。がんばろう。 – shellter

+0

あなたの提案を試してみました。うまくいきません。二重バックスラッシュ(\\ r)でのみ動作します。まだ未解決です。 –

+0

ATコマンドラインは、(おそらくエスケープされた) '\ r'のみで終了する必要があります。http://stackoverflow.com/a/21503919/23118'\ n'を使わないでください。 – hlovdal

答えて

0

y atinoutあなたが求めているプログラム:コマンドラインからATコマンドを送信して出力をキャプチャするプログラム。

あなたのケースでは、結果は

$ echo 'at+cops?' | atinout - /dev/pts/7 - 
+COPS: 0,0,"AT&T",6 

OK 
$ 

ようにする必要がありますとだけではなく、最後の-のファイル名を入れて出力をキャプチャします。

0

出力をファイルにリダイレクトするときも同様の問題がありました。私はCMD/cをechoコマンドの前に追加することで問題を解決しました。私。私が正しく理解していれば、コマンドの実行が完了してから出力をファイルにリダイレクトするまで待つ必要があることをシステムに伝える必要があります。私はDOSでやっていた。

あなたはANDROIDで実行しているので、コマンドの前にsh -cを追加してみてください。それが役に立てば幸い。

関連する問題