簡體   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