2011-02-15 5 views
-1

동적으로 링크 된 원시 코드 개발을 위해 안드로이드 장치에서 모든 공유 오브젝트 파일을 가져 오기위한 작은 스크립트를 작성했습니다. 스크립트가 잘 작동하고 아마 거기서 멈출 수 있지만 임시 파일을 사용하는 것을 좋아하지 않습니다. 나는 이것을 다시 쓰려고 노력하면서 시간을 보냈지 만 나는 그것을 필요로하지는 않지만 모든 종류의 시도에 실패했다. 여기에 스크립트입니다 :임시 파일을 사용하지 않고 스크립트를 다시 작성하도록

declare -rx OUT_FILE=tmp.sh 
adb shell 'cd /system/lib && for f in *.so; do echo -e "adb pull /system/lib/$f ./lib"; done' > $OUT_FILE 
dos2unix $OUT_FILE 
chmod +x $OUT_FILE 
./$OUT_FILE 
rm $OUT_FILE 

내가 ADB 명령 서브 쉘을 사용하고 캐리지 리턴을 제거하기 위해 나오지에 공급 될 수있는 변수에 결과를 할당했습니다. 나는 그것이 작동하도록하지 않을 것입니다. 여기에 내가 명령 치환을 사용하여 시도하는 방법 예는 다음과 같습니다

res=$(adb shell 'cd /system/lib && for f in *.so; do echo -e "adb pull /system/lib/$f ./lib"; done') 
echo $res > tmp.txt 

지금 내 제한된 지식에서 나는 두 번째 솔루션에서 tmp.txt 파일 내 작업 솔루션에서 tmp 파일과 같은 conent를 포함하는 것이라고 생각합니다. 그렇지 않다.

최고 감사합니다,

앙드레 파이프가 지원된다고 가정

+0

스크립트는 $ OUT_FILE을 제거해야하나요? 그런 다음 스크립트의 마지막 줄을 변경하지 않고 'tmp.sh'에서 'tmp. $$'또는 다른 이름으로 이름을 변경할 수 있습니다. 인터럽트시 임시 파일이 제거되도록 '함정'을 조사 할 수도 있습니다. 이 모든 것이 임시 파일을 없애기위한 좋은 이유입니다. –

+0

복사/붙여 넣기 오류가 발생했습니다. 그 이유는 다음과 같습니다. –

+0

두 번째 해결 방법의 결과가 다른 이유는 변수를 인용하지 않았기 때문입니다. 'echo "$ res"> tmp.txt'를 시도한 다음 비교해보십시오. –

답변

0

는 다음이 작동하지합니다 - 어떤 중간 파일을. 'dos2unix'도 순수한 필터로 작동한다는 난폭 한 가정을하고 있습니다. 내가 이것을 증류 관리 위의 모든 힌트에서

adb shell 'cd /system/lib && 
      for f in *.so; do echo -e "adb pull /system/lib/$f ./lib"; done' | 
dos2unix | 
bash 
0

:

lib_list=$(adb shell 'for f in /system/lib/*.so; do echo $f; done') 
for f2 in $lib_list 
do 
    path=$(echo $f2 | tr -d '\r'); 
    adb pull $path ./lib 
done 

이 작동, 주요 문제는 캐리지 리턴이었다. 이것은 -x 디버깅 스위치로 스크립트를 실행하여 볼 수 있습니다.

+0

'$ '\ r'을'$ IFS'에 추가 할 수 있습니다. 이렇게하면 bash는 캐리지 리턴을 단어 분리 기호로 처리하고 공백, 탭 및 개행의 기본값을 처리 할 수 ​​있습니다. – bobbogo

관련 문제