if 문을 사용하여 쉘을 만들었고 모든 개행 문자는 LF(Linux)이며 쉘을 실행하려고 하면 "구문 오류: 'fi' 예상치 못한" 오류가 발생합니다.
if [ "$(ls -A /storage/$SDCARD_DIR/Android/obb/*/)" ]; then
echo -n -e $Y'One of games folders on your external SDCard has been already moved\n\nTo fix that:\n- We back to main menu\n- Select rs option to restore a specifiq game file in your internal storage\n- Try again to the ma option to move all your games files to your external sdcard'$N
clear && main_menu
else
echo -n -e $C"For info: it's necessary to forcing games apps to be closed"$N; sleep 8;
APPSNAMES=`for dirs in "$INTFOLD"; do printf '%s\n' $dirs | sed -r -e 's/\/storage\/emulated\/0\/Android\/obb\///' | awk -f. '{print $NF}' | sed -r -e 's/\///'`
while printf '%s\n' "$APPSNAMES" | while IFS= read -r line
do
if [ -z $(ps | grep "$line") ]; then
xargs kill
echo -n -e $Y'Game(s) app(s) has been closed\nReady for next step...'$N; sleep 4;
else
echo -n -e $C'No game run in background on your device\nNext step now..'$N; sleep 4;
fi
done
echo -n -e $B'Move all your games to your external SCard...'$N; sleep 5;
for D in `find /storage/emulated/0/Android/obb/ -maxdepth 1 -type d`
do cp -af $D $EXSDCARD
done
for F in `find /storage/emulated/0/Android/obb/ -type f`
do rm -f $F
done
for X in `find "$EXSDCARD" -type F`
do ln -s $X $EXSDCARD
done
echo -n -e $G'All OBB files are now moved to your sdcard\nNB: You could even see files in your internal storage, but they are just linked\n'$N; sleep 7;
echo -n -e $B'Back to main menu...'$N; sleep 5;
main_menu
fi
이 오류가 발생하는 이유를 이해할 수 없습니다. Android 환경에서 이 스크립트를 사용하고 있으며 Termux, Busybox를 사용하고 있으며 루트 액세스 권한이 있다는 점을 지적하고 싶습니다.
동일한 문제가 있는 여러 사용자 스레드를 검사했는데 아무 문제도 발견되지 않았습니다.
답변1
내가 싫어하는 유일한 점은 (틀린 것으로 보일 수 있는) 것입니다.
while printf '%s\n' "$APPSNAMES" | while IFS= read -r line
두 기간, 한 번만 수행 + 완료