2016-04-21 61 views
-1

我使用输出一些命令来获得.apk文件的路径,然后拉从Android手机该文件是这样的:命令在bash不工作,如果我动态设置变量

#!/bin/bash 
#This command sets APK_PATH variable to /data/app/com.test.something-1/base.apk 
APK_PATH="$(adb shell pm path com.test.something | cut -d':' -f 2)" 
# adb pull command is being used to pull .apk file from phone when I have the path 
adb pull $APK_PATH 

这种动态的方法获取.apk路径并从手机中拉取文件不起作用。它的结果与以下错误消息:

' does not existdata/app/com.test.something-1/base.apk 

然而,当我硬编码路径,它完美的作品:

#!/bin/bash 
APK_PATH=/data/app/com.test.something-1/base.apk 
adb pull $APK_PATH 

谁能帮我这个小片的bash脚本?我相信当'adb pull'开始执行但不能修复时,APK_PATH还没有设置。

+0

我喜欢“动态设置变量” :-)如果它是静态设置,不会是一个常数? ;-) – SaintHax

+0

这很明显,'adb shell pm path com.test.something | cut -d':'-f 2'不返回正确的路径。设置后回显出APK_PATH,看看有什么。 – 123

+0

当我打印出来时,它是正确的。请阅读说明。 – Drag0

回答

1

我猜你会得到一个不想要的特殊字符在返回的值,奇怪的缺失空间和领先/(除非你只是在你的信息输入错误)b/c。

试试这个

APK_PATH="$(adb shell pm path com.test.something |tr -cd '[:graph:] \t' |cut -d':' -f2)"

+0

嗯,这很有趣。你的代码返回相同的路径,至少我可以看到它如何在屏幕上打印出来。但是,当我用你的方式获得字符串,它的工作原理。你能解释一下你做了什么吗? – Drag0

+0

当然,tr(translate)会删除所有不可打印的字符和空格(事后看来,这可能会在你的路径中,所以我会编辑)。看起来,你的命令返回了两个退格。这是吃你的主要斜线,所以tr删除它们之前,将字符串存储到您的变量。 – SaintHax