이와 같은 간단한 것이 확실히 작동합니다.
#!/bin/bash
touch /sdcard/successful.txt
하지만 실제 bash 명령에서는 작동하지 않습니다.
#!/bin/bash
PACKAGE='com.mixplorer'
if [ $(pidof $PACKAGE) ]; then
am force-stop com.mixplorer && am start -n com.mixplorer/.activities.BrowseActivity
fi
if [ ! $(pidof $PACKAGE) ]; then
am start -n com.mixplorer/.activities.BrowseActivity
fi
loopcleaner()
{
rm -rf /sdcard/log.txt
}
while [ $(pidof $PACKAGE) ]
do
loopcleaner
sleep 2
if [ ! $(pidof $PACKAGE) ]; then
touch /sdcard/successful.txt
exit 0;
fi
done
설명하다:
스크립트가 실행된 후 먼저 패키지 이름이 "com.mixplorer"인 파일 관리자가 활성화되어 있는지 확인하고 활성화되어 있으면 강제로 중지하고 다시 엽니다. 그렇지 않다면 그냥 켜십시오.
이제 파일 관리자가 열렸으므로 파일 관리자 프로세스가 실행되는 동안 Loopcleaner에서 정의한 "log.txt"라는 파일을 10초마다 루프에서 지속적으로 삭제할 수 있습니다.
위의 정리 활동은 파일 관리자 프로세스가 실행될 때까지만 작동해야 하며 일단 중지되면 Success.txt라는 파일이 생성됩니다. 이제 스크립트가 즉시 종료됩니다.
따라서 파일 관리자를 종료한 후 어떤 이유로 내부 저장소에 성공적인.텍스트가 생성되지 않습니다(터치 명령만 실행하면 제대로 작동합니다).
답변1
터치 명령 뒤에 중단을 추가하여 문제를 해결했습니다.
while [ $(pidof $PACKAGE) ]
do
loopcleaner
sleep 2
if [ ! $(pidof $PACKAGE) ]; then
touch /sdcard/successful.txt
break
exit 0;
fi
done
(저는 bash를 처음 접했고 이것이 최선의 접근 방식인지에 대해 확신이 없습니다. 따라서 추가 편집/개선 제안이 있으면 크게 감사하겠습니다.)