2016-04-21 60 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