the point is, that install_recovery.sh is run by the init process and certain commands or mount modules might not be available at this point.

you might try to replace mount with /system/bin/busybox mount

Finally I found that when "install-recovery.sh" is running, the sdcard had not been mounted yet. Because install-recovery.sh can mkdir in /data but can't mkdir in /mnt/sdcard,
then the question is, how to mount the sdcard in install-recovery.sh?