2013-03-07 74 views
11

爲什麼我不能輸入adb shell進入'adb shell'

[[email protected] ~]$ echo foo | adb shell cat 
^C 

上述命令掛在我的4.0.1模擬器,和我沒有看到預期的foo輸出。

我認爲這是因爲adb shell不會將其標準輸入插入其子進程的標準輸出中,並且cat會永遠等待。這真的沒有在adb實施,或者我錯過了什麼?

回答

3

這是正確的。此功能尚未實施。

更新:

很多的bug已經被固定,因爲原來的問題已經張貼時間adb實現新的功能。包括支持正確stdin處理adb shell。因此,不再需要netcat解決方法。

+2

我覺得很奇怪!它是這樣的基本功能,並且看起來不難實現。我錯過了什麼嗎? – kristianlm 2013-03-27 23:36:56

+0

這是真的......它不會創建一個「交互式shell」(從標準輸入讀取),當有'adb shell'參數時[如此顯示](https://github.com/android/platform_system_core/blob /master/adb/commandline.c#L1204)。 – kristianlm 2014-08-13 13:53:47

+0

帶參數的'adb shell'和'adb shell'都沒有正確的標準輸入處理,請嘗試echo date | adb shell'和'echo foo | adb shell wc'。既不產生預期的輸出,也不需要使用Ctrl-C來終止進程。在Linux上使用'adb version' =>'Android Debug Bridge version 1.0.39 Revision 3db08f2c6889-android'進行測試。 – ack 2017-07-16 01:48:02

6

備用選項可能是使用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交付。


附加信息
焦油相結合,可以整個目錄結構複製到您的設備。

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

adb forward tcp:4444 tcp:5555 # PC side 
tar -c directory | busybox nc localhost 4444 
+0

我喜歡你可以用tar複製整個dirs,但是用tcp轉發它是兩個命令,而不僅僅是一個像它應該是...... – kristianlm 2013-05-01 12:31:01

1

這裏是我的解決方案。將下面的進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聽衆。

+1

我想這不會工作,如果你開始同時運行多個'adb shell'命令。整潔的哈克,雖然:) – kristianlm 2014-08-13 13:12:11