adb: shell: add -n flag to not read from stdin.
Shell scripts of the following form do not work properly with adb:
echo "foo\nbar\nbaz" | {
read FOO
while [ "$FOO" != "" ]; do
adb shell echo $FOO
read FOO
done
}
The first run of adb shell will consume all of the contents of stdin,
causing the loop to immediately end. ssh solves this by providing a -n
flag that causes it to not read from stdin. This commit adds the same.
Bug: http://b/25817224
Change-Id: Id74ca62ef520bcf03678b50f4bf203916fd81038
diff --git a/adb/commandline.cpp b/adb/commandline.cpp
index bd3813e..a43b6ab 100644
--- a/adb/commandline.cpp
+++ b/adb/commandline.cpp
@@ -112,9 +112,10 @@
" (-a preserves file timestamp and mode)\n"
" adb sync [ <directory> ] - copy host->device only if changed\n"
" (-l means list but don't copy)\n"
- " adb shell [-e escape] [-Tt] [-x] [command]\n"
+ " adb shell [-e escape] [-n] [-Tt] [-x] [command]\n"
" - run remote shell command (interactive shell if no command given)\n"
" (-e: choose escape character, or \"none\"; default '~')\n"
+ " (-n: don't read from stdin)\n"
" (-T: disable PTY allocation)\n"
" (-t: force PTY allocation)\n"
" (-x: disable remote exit codes and stdout/stderr separation)\n"
@@ -733,6 +734,11 @@
use_shell_protocol = false;
--argc;
++argv;
+ } else if (!strcmp(argv[0], "-n")) {
+ close_stdin();
+
+ --argc;
+ ++argv;
} else {
break;
}