gpt4 book ai didi

android - adb 无法在 bash 中使用变量

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:08:13 25 4
gpt4 key购买 nike

我正在尝试从我的 android 手机(root)中导出所有 apk。

我已经使用 adb shell pm list 将所有包转储到一个文件中。

com.google.android.earscom.android.voicedialer...

Now I want to download them, but it doesn't work:

#!/bin/bash

while read line; do
echo "Name: $line"
# get package path
p=$(adb shell pm path $line);
# remove package: prefix
p=$(echo $p | grep -Po "(?<=package:).*" | xargs)
echo "Path: $p"
# download it
adb pull $p
done;

我得到这样的东西:

Name: com.google.android.earsPath: /system/app/GoogleEars.apk' does not exist/system/app/GoogleEars.apkName: com.android.voicedialerPath: /system/priv-app/VoiceDialer.apk' does not exist/system/priv-app/VoiceDialer.apkName: com.android.defcontainer^C

当我在终端中手动执行时,它工作得很好。

为什么它在这里不起作用?

最佳答案

正如评论中所指出的,adb 命令以 \r 结尾。你也必须从这一行中删除它

p=$(adb shell pm path $line)

用类似的东西

p=$(adb shell pm path $line | tr -d '\r')

我看到另一个问题:很多apks会被覆盖为base.apk

Name: com.google.android.youtube
Path: /data/app/com.google.android.youtube-1/base.apk
Name: net.mx17.overridedns
Path: /data/app/net.mx17.overridedns-2/base.apk
Name: com.android.email
Path: /system/app/Email/Email.apk

所以我想我会用类似的东西来做

#!/bin/bash

while read line; do
echo "Name: $line"
# get package path
p=$(adb shell pm path $line | sed 's/^package://;s/\r$//')
echo "Path: $p"
# get package name
name=$(echo $p | awk -F/ '{print $(NF-1)}')
echo "Package name: $name"
# download it
adb pull $p ${name}.apk
done < <(adb shell pm list packages | sed 's/^package://;s/\r$//')

关于android - adb 无法在 bash 中使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29431041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com