댓글 쓰기 권한이 없습니다. 로그인 하시겠습니까?
곰돌워즈 에피소드 4: 새로운 삽질 - 쉘 명령중에 wc를 대체 어디다 쓸데가 있나 했는데 정말로 쓸 데가 있군요;;
오늘 버그리포트 하나를 받았는데 G Pro에서 SD카드가 없을 시에 곰돌백업이 동작 안한다는 충격적인 내용이었습니다 -_-
곰돌백업은 가장 곰돌라이트의 핵심기능 중 하나고 개인적으로 굉장히 공들였기때문에 이게 동작안하면 곤란합니다.
진단용 파일인 곰돌 SITREP을 요청했더니 SD카드가 없는데도 있는 것처럼 인식하는 것이었습니다 -_-;
사실 SD카드 체크는 굉장히 원시적인 방법으로 이루어지게 되어 있었습니다. 이 단순한 대갈휘의 한계가 딱 거기까지죠 뭐
[ -e /system/gomdolconfig/devicetype_lgclass2 ] && GLEXTERNALSDPATH=external_SD
[ -e /system/gomdolconfig/devicetype_lgclass1 ] && GLEXTERNALSDPATH=sdcard1
touch /storage/$GLEXTERNALSDPATH/gomdolight_external_sdcard_check
sync
if [ -e /storage/$GLEXTERNALSDPATH/gomdolight_external_sdcard_check ]; then
touch /data/gomdolight_external_sdcard_inserted
else
rm /data/gomdolight_external_sdcard_inserted
fi
rm /storage/$GLEXTERNALSDPATH/gomdolight_external_sdcard_check
그래서 얼핏 생각하면 SD카드가 뽑혀 있는 상태에서는 저 gomdolight_external_sdcard_check가 안 생겨야 정상인데...
(그리고 LTE2나 G에서는 안 생기는걸 확인했는데)
...세상에나 G Pro에서는 생기더라고요. 게다가 파일 입출력이 자유자재로 가능해?
뭔가 처리하는게 달라진 모양입니다. 어쩌면 OTG 지원 관련인지도 모르겠습니다. 잘은 모르겠지만, 아무래도 저 공간에 SD카드가 없으면 임시 공간에 입출력이 이루어지는 것 같기도 합니다. 어쨌든 문제는 저 파일이 정상적으로 생성되는 바람에 SD카드가 없어도 무조건 있지도 않은 SD카드 경로로 백업이 되는 것이었습니다.
그래서 안돌아가는 머리를 다시 굴려서...
파일 만드는 부분을 제외하고 if문을
if [ `df /storage/$GLEXTERNALSDPATH | tail -n +2 | awk '{print $2}'` != "0.00K" ]
와 같이 고쳐 봤습니다.
성공하는 듯 싶어서 테스트를 띄워봤는데 오류난다고 하는 분이 엄청 많으시더라고요......-_-
원래는 SD카드가 없어도 저 디렉토리가 df에 보이고 용량이 0.00K로 나오는걸 이용해서 결과값을 0.00K라는 문자열과 비교하려고 했는데.........어떤 경우에는 저 디렉토리 자체가 사라지더라고요? 똑같은 디바이스에서 사람들의 리포트 내용이 달라지니 멘붕이 오더군요-_-; 뭥미이거?
안되겠다 싶어서 아예 접근을 바꾸기로 했습니다. 보니까 mount 명령 결과에서는 SD카드가 마운트 되어 있는지 아닌지 여부가 칼같이 나오더군요. 그래서 이걸 이용하기로 했습니다. mount 결과값 중에 $GLEXTERNALSDPATH와 일치하는 게 있는지만 보면 되니까 grep으로 뽑아내면 될 것 같았습니다. 해보니 이건 먹히네요. SD가 뽑히면 아예 결과가 안나오고, SD가 삽입되면 뭔가 결과가 나오더라고요.
근데 이걸 if문에 넣을 생각을 하니 막막했습니다 -_- 역시 아는게 없다보니 대충
if [ `mount | grep $GLEXTERNALSDPATH` != "" ]
이렇게 넣어봤는데 에러나더라고요............... 공백값은 안되는 건지 뭔가 사소한 데서 틀린 건지 모르겠는데
중요한건 어쨌든 안 되었다는 거니까요. 그래서 그나마 쓸 줄 아는 수치비교로 바꿔 보고 싶었는데
...생각해보니 이건 문자열이네요-_-;; -ne 0은 이대로 먹힐 리가 없을 것 같고...
그래서 구글님께 shell에서 character count를 어떻게 하는지 여쭈었더니
wc라는 걸 주시더라고요.....
if [ `mount | grep $GLEXTERNALSDPATH | wc -m` -ne 0 ]
했더니 문자열의 길이를 환산해서
- SD카드가 뽑히면 결과값이 없으니까 닥치고 0
- SD카드가 삽입되면 어떻게든 뭔가 결과는 나오니 적어도 0은 아님
이라는 결과가 나오더라고요.
어떻게든 간신히 성공했습니다.
기존 상태로 xda 갔었다면 개망신 당할 뻔했네요-_-;;;;;;;;;
●?Who's Celes
-
?
ㅋㅋㅋㅋ 고생했네~
-
고생하셨네요.
-
뭔소린지 하나도 모르겠... (후다닥)
-
에이~
Designed by sketchbooks.co.kr / sketchbook5 board skin
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5