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