繁体   English   中英

如果将脚本通过管道传输到 bash 中,则会出现奇怪的 adb 行为

[英]strange adb behaviour if script is piped into bash

我偶然发现了一种我无法解释的奇怪行为。 我试图缩小问题的范围。 我有以下测试 testscript.sh 脚本:

echo before
adb shell ls
echo after

如果我使用bash -x testscript.sh运行脚本,一切都会按预期运行,我会得到以下 output:

+ echo before
before
+ adb shell ls
acct
bin
bugreports
...
sdcard
storage
sys
system
ueventd.rc
vendor
+ echo before
before

但是,如果我使用cat testscript.sh | bash -sx将脚本作为管道脚本运行 cat testscript.sh | bash -sx ,我得到以下 output:

+ echo before
before
+ adb shell ls
acct
bin
bugreports
...
sdcard
storage
sys
system
ueventd.rc
vendor

echo after没有执行,我不知道为什么。 该脚本在 Ubuntu 服务器 18.04 上运行。 adb 是来自官方 Ubuntu package 的那个。

$ adb --version
Android Debug Bridge version 1.0.39
Version 1:8.1.0+r23-5~18.04
Installed as /usr/lib/android-sdk/platform-tools/adb
$ bash --version
GNU bash, version 4.4.20(1)-release (x86_64-pc-linux-gnu)

请有人能启发我,这里发生了什么。

当您使用bash scriptname运行脚本时,它运行的所有命令的标准输入仍连接到终端。 因此adb将从终端读取其标准输入。

当您重定向bash的输入时,此重定向由adb继承。 除非您对adb shell使用-n选项,否则它将从标准输入读取附加输入并将其作为您运行的命令的可能输入发送到远程系统(它不知道ls不读取标准输入)。

将其更改为

adb shell -n ls

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM