adb pull 不接受變數作為源,給出 ’ 不存在.. 錯誤
我正在嘗試在
adb pull
命令中使用 $EXTERNAL_STORAGE。我注意到該變數的範圍僅在 Android 中定義,因此在adb pull $EXTERNAL_STORAGE/Pictures/Screenshots/ ~/
.當然,我可以寫一個絕對路徑來獲取所有的截圖,但問題是別的。
我嘗試過:
af=$(adb shell echo \$EXTERNAL_STORAGE/圖片/截圖/) adb 拉$ af ~ /
這給了我錯誤:
' does not existstorage/sdcard0/Pictures/Screenshots/
或者,如果我這樣做:
af="/storage/sdcard0/圖片/截圖/" 亞行外殼 $af ~/
然後成功獲取螢幕截圖。
字數有差異。對於 $af 從 接收輸入的第一種情況,和
adb shell
的輸出分別為 39 和 40。${#af}``echo $af | wc -c
對於將直接字元串輸入 $af 的第二種情況, 和 的輸出
${#af}
分別echo $af | wc -c
為 38 和 39。我認為這可能是尾隨空格的結果,所以我在其中添加了一個空格
$af=/storage/sdcard0/Pictures/Screenshots/ "
但adb pull $af ~/
仍然執行良好。另外,我跑了
echo $af | fold -w1 | wc -l
,兩種情況的輸出都是 38。那麼,是什麼導致亞行拋出該錯誤?
如果重要的話,我使用的是 Slackware 14.1 並植根於 Android 4.2.1 和 5.0.2。
你的第一次嘗試就快到了。問題是 adb 在每一行的末尾添加了一個輸入,這無濟於事。在輸出列印到終端的基本用法中看不到,因為行尾的輸入沒有視覺效果(輸入將游標移動到目前行的開頭,但隨後換行符將游標移動到下一行的開頭)。
當您將輸出儲存在變數中時,輸入符在 中
$af
,然後adb pull
將其視為文件名的一部分。錯誤消息看起來很奇怪,因為中間有輸入,這會導致消息的後半部分覆蓋前半部分。在使用變數之前刪除輸入符。
af=$(adb shell 'echo "$EXTERNAL_STORAGE/Pictures/Screenshots/"') af=${af%$'\r$} adb pull "$af" ~/
或直接
adb pull "$(adb shell 'echo "$EXTERNAL_STORAGE/Pictures/Screenshots/"' | tr -d '\r')" ~/
或者
adb pull "$(adb shell 'echo "$EXTERNAL_STORAGE"' | tr -d '\r')/Pictures/Screenshots/" ~/
或者,將輸入聲明為單詞分隔符,並將
af
變數不加引號。這僅在$af
不包含空格時才有效。IFS+=$'\r' adb pull $(adb shell 'echo "$EXTERNAL_STORAGE/Pictures/Screenshots/"') ~/
或者,使用您選擇的名稱創建符號連結,而不是依賴環境變數。
adb shell 'ln -s "$EXTERNAL_STORAGE" /external-storage'
一勞永逸,然後復製文件
adb pull /external-storage/Pictures/Screenshots ~/
使用符號連結,您可以避免使用
adb
命令行並使用adbfs掛載 Android 文件系統。mkdir -p ~/mnt/android adbfs ~/mnt/android cp -Rp ~/mnt/android/Pictures/Screenshots ~/