簡體   English   中英

在Android ADB Shell中運行Shell腳本

[英]Running shell script in Android adb shell

我正在嘗試創建一個腳本,以通過adb shell從Android模擬器中查找和刪除我的應用。

這就是我得到的:

adb shell "
cd data/app
for app in com.mycompany.*.apk;
do
    echo $app
    bundle=$(echo $app | sed 's/-[0-9]//g')
    echo 'bundle name is $bundle'
    if [ '$bundle' != '' ];then
        adb uninstall $bundle
    else
        echo 'No apps found'
    fi
done
exit
"

但是它似乎沒有按預期工作。

  • 我的for循環不會遍歷任何東西。 如果我在外殼中完全按照上面的命令手動運行命令,則它可以工作,但是當我從shellscript運行命令時, for循環將看不到文件或任何內容。 盡管如果添加“ ls”,它會正確打印文件夾的內容。
  • echo $app輸出任何內容(空字符串),並且;
  • echo 'bundle name is $bundle'打印bundle name is

因此,它顯然永遠不會進入我的if塊,而落入我的else子句中。

我究竟做錯了什么? 我對shell腳本不是很有經驗,我會很感激任何想法。

我的目標是擁有一個shell函數,可以調用它來自動執行從模擬器中刪除應用程序的過程,而無需手動拖動和卸載它。 其他想法也非常受歡迎。

謝謝!

您不應該真正瀏覽/data/app文件夾。 如果要使用單個adb命令卸載名稱與com.mycompany模式匹配的多個軟件包,請使用:

adb shell "pm list packages com.mycompany | cut -c9- | xargs -n 1 sh /system/bin/pm uninstall"

我仍然想知道為什么我的方法“次優”,我能做得更好嗎?

大膽猜測,因為我對adb shell不熟悉,但對bash卻很:報價。 變量不能在刻度“ ... $ VAR”內,而應在“ ... $ VAR”內。 滴答中的所有內容均按“原樣”進行,即從字面上看:

echo 'bundle name is $bundle'

echo "bundle name is $bundle"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM