我尝试创建一个脚本,通过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
循环没有迭代任何东西。如果我在shell中完全按照上面的方式手动运行命令,它可以工作,但是当我从一个shellcript运行它时,for
循环看不到文件或任何东西。虽然如果我添加" ls",它会正确打印文件夹的内容......所以; echo $app
不打印任何内容(空字符串)和; echo 'bundle name is $bundle'
打印bundle name is
。 因此,它显然永远不会进入我的if块,进入我的else子句并且那就是它。
我做错了什么?我在shell脚本方面不是很有经验,我很欣赏任何想法。
我的目标是拥有一个shell函数,我可以调用它来自动化从模拟器中删除我的应用程序的过程,而无需拖动它并手动卸载它。其他想法也非常受欢迎。
谢谢!
答案 0 :(得分:1)
您不应该真正浏览/data/app
文件夹。如果要使用单个adb命令卸载名称与com.mycompany
模式匹配的多个包,请使用:
adb shell "pm list packages com.mycompany | cut -c9- | xargs -n 1 sh /system/bin/pm uninstall"
答案 1 :(得分:1)
我仍然很想知道为什么我的做法是次要的"次优的"什么 我可以做得更好吗?
狂野的猜测,因为我不熟悉adb shell而是bash:Quotation。变量不能在里面打勾' ... $ VAR'但是" ... $ VAR"。任何内部刻度都是"按照",即字面意思:
echo 'bundle name is $bundle'
VS
echo "bundle name is $bundle"