[英]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.