Running shell script in Android adb shell

懵懂的女人 提交于 2019-12-02 14:13:38

问题


I'm trying to create a script to find and remove my app from the Android emulator through the adb shell.

This is what I've got:

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
"

But it doesn't seem to work as expected.

  • my for loop doesn't iterate through anything. If I manually run the commands exactly as above in the shell, it works, but when I run it from a shellscript then the for loop doesn't see the files or anything. Although if I add an "ls", it prints the contents of the folder correctly... So;
  • echo $app prints nothing (an empty string) and;
  • echo 'bundle name is $bundle' prints bundle name is.

Therefore, it obviously never goes inside my if block, falling in to my else clause and that's it.

What am I doing wrong? I'm not very experienced in shell script, I'd appreciate any ideas.

My goal with this is to have a shell function that I can call to automate the process of removing my app from the emulator without having to drag it and uninstall it manually. Other ideas are also very much welcome.

Thanks!


回答1:


You should not really go through the /data/app folder. If you want to uninstall multiple packages with names matching the com.mycompany pattern with a single adb command use:

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



回答2:


I'm still curious to know why my approach was "suboptimal" and what could I have done better?

Wild guess since I'm not familiar with adb shell but bash: Quotation. Variables can not be inside ticks '...$VAR' but "...$VAR". Anything inside ticks is taken "as is", i.e. literally:

echo 'bundle name is $bundle'

vs.

echo "bundle name is $bundle"


来源:https://stackoverflow.com/questions/26865761/running-shell-script-in-android-adb-shell

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!