adb pull
명령에 $EXTERNAL_STORAGE를 사용 하려고 합니다 . 변수의 범위는 Android에서만 정의되므로 adb pull $EXTERNAL_STORAGE/Pictures/Screenshots/ ~/
.
물론 모든 스크린샷을 얻기 위해 절대 경로를 작성할 수도 있지만 문제는 다른 것입니다.
나는 이전에 시도했습니다:
af=$(adb 쉘 에코 \$EXTERNAL_STORAGE/사진/스크린샷/) adb 풀 $af ~/
이로 인해 오류가 발생합니다.
' does not existstorage/sdcard0/Pictures/Screenshots/
아니면 이렇게 하면:
af="/storage/sdcard0/image/screenshot/" adb 쉘 $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이었습니다.
그렇다면 ADB에서 이 오류가 발생하는 원인은 무엇입니까?
중요한 경우 Slackware 14.1과 루팅된 Android 4.2.1 및 5.0.2를 사용하고 있습니다.
답변1
첫 번째 시도에 거의 다 왔습니다. 문제는 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
심볼릭 링크를 사용하면 명령줄을 사용하지 않고 다음을 사용할 수 있습니다 .데이터베이스 파일 시스템Android 파일 시스템을 마운트합니다.
mkdir -p ~/mnt/android
adbfs ~/mnt/android
cp -Rp ~/mnt/android/Pictures/Screenshots ~/