11

にパイプできないのはなぜadb shellですか?

[klm@kth ~]$ echo foo | adb shell cat
^C

上記のコマンドが私の 4.0.1 エミュレーターでハングし、予期したfoo出力が表示されません。

adb shellそれは、stdin を子プロセスの stdout にパイプせず、cat座って永遠に待機しているためだと思います。これは実際に に実装されていないのadbでしょうか、それとも何か不足していますか?

4

3 に答える 3

8

別のオプションとして、adb ポート フォワーディングと netcat を使用することもできます。

Android 側で受信するように設定します。

busybox nc -lp 5555 > piped_file.txt

PC 側、転送を設定して送信:

adb forward tcp:4444 tcp:5555 # Anything sent to localhost 4444 will be forwarded to Android 5555
cat piped_file.txt | busybox nc localhost 4444 # Pipe through the port to Android

PC の netcat は転送されたポートを介して Android の netcat に接続し、piped_file.txtが配信されます。


追加情報
tar と組み合わせると、ディレクトリ構造全体をデバイスにコピーできます。

busybox nc -lp 5555 | tar -x # Android side

adb forward tcp:4444 tcp:5555 # PC side
tar -c directory | busybox nc localhost 4444
于 2013-04-16T03:45:10.843 に答える
4

正解です。この機能は実装されていません。

アップデート:

adb元の質問が投稿されて以来、多くのバグが修正され、新しい機能が実装されました。stdinによる適切な取り扱いのサポートを含みadb shellます。したがって、回避策はもう必要ありnetcatません。

于 2013-03-07T19:10:21.390 に答える
1

これが私の解決策です。以下をadb_shell.shファイルに入れて、代わりに使用しますadb shell

#!/bin/bash

adb forward tcp:12345 tcp:12345
adb shell busybox nc -lp 12345 -e "$@" &
sleep 1s
exec nc -q 1 localhost 12345

これにより、nc接続時に指定されたコマンドを実行し、それに接続するリスナーが作成されます。

于 2014-07-15T07:51:48.347 に答える