adb shell
にパイプできないのはなぜですか?パイプを `adbシェル`に変換する
[[email protected] ~]$ echo foo | adb shell cat
^C
上記のコマンドは、私の4.0.1エミュレータ上でハングアップ、と私は予想foo
出力が表示されません。
adb shell
はstdinをその子プロセスのstdoutにパイプしないので、cat
は永遠に座って待ちます。これは実際にadb
に実装されていないのですか、何か不足していますか?
adb shell
にパイプできないのはなぜですか?パイプを `adbシェル`に変換する
[[email protected] ~]$ echo foo | adb shell cat
^C
上記のコマンドは、私の4.0.1エミュレータ上でハングアップ、と私は予想foo
出力が表示されません。
adb shell
はstdinをその子プロセスのstdoutにパイプしないので、cat
は永遠に座って待ちます。これは実際にadb
に実装されていないのですか、何か不足していますか?
これは正しいです。この機能は実装されていません。
更新:
多くのバグが修正されていると新機能は、元の質問が投稿されていた時以来adb
に実装されています。適切なstdin
処理のサポートを含めてadb shell
。だから、もうnetcat
回避策の必要はありません。
代替オプションとして、adbポート転送とnetcatを使用することができます。
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
が配信される受け取るために、Androidの側面を設定
。タールと組み合わせる
追加情報
、あなたはあなたのデバイス上に全体のディレクトリ構造をコピーすることができます。
busybox nc -lp 5555 | tar -x # Android side
adb forward tcp:4444 tcp:5555 # PC side
tar -c directory | busybox nc localhost 4444
私はtarでdir全体をコピーできるのが好きですが、tcp forwardでは2つのコマンドであり、そうでなければならないだけではありません... – kristianlm
ここに私のソリューションです。 adb_shell.sh
ファイルに以下を入れて、adb shell
の代わりに使用:
#!/bin/bash
adb forward tcp:12345 tcp:12345
adb shell busybox nc -lp 12345 -e "[email protected]" &
sleep 1s
exec nc -q 1 localhost 12345
これは、接続時に指定されたコマンドを実行し、それに接続するnc
リスナーを作成します。
複数の 'adbシェル'コマンドを同時に実行し始めると、これはうまくいかないでしょう。ニートハック、しかし:) – kristianlm
私はそれが奇妙なことを発見!それは基本的な機能であり、実装が難しいとは思われません。何か不足していますか? – kristianlm
これは本当に真実です...ここに表示されているように 'adb shell'への引数がある場合、' interactive shell '(stdinから読み込み)を作成しません。(https://github.com/android/platform_system_core/blob /master/adb/commandline.c#L1204)。 – kristianlm
引数を持つ 'adb shell'も' adb shell'も適切な標準処理をしていません。 'echo date | adbシェル 'と' echo foo | adbシェルwc'。どちらも期待どおりの出力を生成せず、Ctrl-Cを使用してプロセスを終了する必要があります。 Linux上で 'adb version' =>' Android Debug Bridge version 1.0.39 リビジョン3db08f2c6889-android'でテストされました。 – ack