

adb shellで使える実行可能なネイティブバイナリを作ったのですが、それをadb
shellに入るコマンドと別に実行するとうまくいくのですが、一続きで実行するとうまくいきません。  
解決策がお分かりの方是非教えていただけませんでしょうか。

うまくいくコマンド

[code]

    (C:\user~)$ adb shell
    (adb shell上)$ /data/local/tmp/makeaction < /mnt/sdcard/testtap.txt
    
[/code]

うまくいかないコマンド(これをうまくいかせたい)

[code]

    (C:\user~)$ adb shell /data/local/tmp/makeaction < /mnt/sdcard/testtap.txt
    指定されたパスが見つかりません。
    
[/code]

ちなみに、どこまでうまくいっているか調べるために以下のように実行したところmakeactionが実行されているのは確認できました。

[code]

    (C:\user~)$ adb shell /data/local/tmp/makeaction
    
[/code]

さらに以下のように実行するとエラーは出ないものの先程のmakeactionのみで実行したときと同じ実行結果となりました。

[code]

    adb -s HT36MS908593 shell /data/local/tmp/makeaction < C:\testtap.txt
    
[/code]

これらより「＜」の右の指定先には何らかの制限があるのかと思うのですがここでつまずいております。  
どうかよろしくお願いします。

ちなみに、こちらのサイトを参考にさせていただきました。  
<http://techblog.qoncept.jp/?p=397>


CC BY-SA 3.0
2016-03-24T12:53:50.227
23421
2016-03-24T14:04:44.963
14924
question
adb
adb shell で「＜」がうまくいかない

[code]

    adb shell ”/data/local/tmp/makeaction < /mnt/sdcard/testtap.txt”
    
[/code]

のようにコマンド全体を「"」や「'」でクォートしてみて下さい。

`<`はリダイレクト記号で、これを解釈してファイルをコマンドの標準出力に繋げるのはシェルの役目です。  
問題は「どちらの」シェルがこの記号を解釈して、リダイレクトを実行しているかです。

[code]

    adb shell /data/local/tmp/makeaction < /mnt/sdcard/testtap.txt
    
[/code]

とした場合、リダイレクトを解釈するのは開発（ローカル）環境のシェルです。  
`adb` コマンドの標準入力に開発マシンの`/mnt/sdcard/testtap.txt`を繋げようとします。  
`adb`の（デバッグ対象マシンの中で動く）シェルにリダイレクトを処理させなければいけません。

「"」等でクォートすると `<` も開発マシンのシェルにとってはただの文字列になり、そのままadbのシェルに伝わります。


CC BY-SA 3.0
2016-03-24T14:04:44.963
23423
2016-03-24T14:04:44.963
3054
23421
answer