Linux BASH循环的递归
我还有一个问题。这段代码是为我正在制作的Linux发行版中的rcS脚本编写的,由于某些原因,它偶尔会出错。大约85%的时间它工作正常,一切都很好。但是,有15%的时间它在创建目录或装载时出错Linux BASH循环的递归,linux,bash,loops,for-loop,Linux,Bash,Loops,For Loop,我还有一个问题。这段代码是为我正在制作的Linux发行版中的rcS脚本编写的,由于某些原因,它偶尔会出错。大约85%的时间它工作正常,一切都很好。但是,有15%的时间它在创建目录或装载时出错 # Find and mount all detected drives sda-sdm and partitions 0-10, you can change these by changing the values but odds are you won't have more than 26
# Find and mount all detected drives sda-sdm and partitions 0-10, you can change these by changing the values but odds are you won't have more than 26 USB drives plugged in or 10 partitions ;)
echo " ${YELLOW}[ ${BLUE}*${YELLOW} ] Finding and mounting the program drive"
for DRIVE in a b c d e f g h i j k l m n o p q r s t u v w x y z; do
mkdir "/mnt/sd${DRIVE}/"
mount "/dev/sd${DRIVE}" "/mnt/sd${DRIVE}/" 2> /dev/null
if [ ! "${?}" = '0' ]; then
rmdir "/mnt/sd${DRIVE}/"
fi
for PARTITION in 1 2 3 4 5 6 7 8 9 10; do
mkdir "/mnt/sd${DRIVE}${PARTITION}"
mount "/dev/sd${DRIVE}${PARTITION}" "/mnt/sd${DRIVE}${PARTITION}/" 2> /dev/null
if [ ! "${?}" = '0' ]; then
rmdir "/mnt/sd${DRIVE}${PARTITION}/"
fi
if [ -d /mnt/sd${DRIVE}${PARTITION}/*/program-drive-${ARCH} ]; then
if [ ! "${PROGRAM_DRIVE_FOUND}" = 'YES' ]; then
PROGRAM_DRIVE_FOUND='YES'
echo "${MESG} Found program drive on device sd${DRIVE}${PARTITION} mounted at /mnt/sd${DRIVE}${PARTITION}"
source /mnt/sd${DRIVE}${PARTITION}/*/program-drive-${ARCH}/os_info
rm "/etc/init.d/os_info"
cp /mnt/sd${DRIVE}${PARTITION}/*/program-drive-${ARCH}/os_info "/etc/init.d/os_info"
echo "${MESG} Adding user ${USER}"
/bin/adduser -s /bin/bash -G root -D "$USER"
echo "${USER}:password" | /usr/sbin/chpasswd -m > /dev/null
echo -e "${USER}\tALL=NOPASSWD: ALL" >> /etc/sudoers
mount -o loop /mnt/sd${DRIVE}${PARTITION}/*/program-drive-${ARCH}/home "/home/${USER}/" 2> /dev/null
rmdir "/home/${USER}/lost+found/" 2> /dev/null
chmod 770 "/home/${USER}/"
if [ ! "${?}" = '0' ]; then
echo "${MESG} Error mounting home on program drive! 'home' file gone or corrupt."
echo "${RED}SYSTEM BROKEN, PRESS ANY KEY TO SHUTDOWN:"
read -sn 1
poweroff
fi
fi
fi
done
done
这里没有足够的信息来回答这个问题。具体来说,查看您得到的错误(或segfault)会很有帮助。调试时,您可能应该去掉命令末尾的“2>/dev/null”,这样您就有机会读取提供给您的任何错误输出。您已经做了几天了,但仍然有一个39行的脚本?本应将其精简为一个调试想法,将
睡眠
放在战略位置是否可以消除错误。系统可能无法跟上所有这些工作,并产生Seg故障进行投诉。但是,您的CMD是一个接一个地运行的,因此可能是在继续下一步之前完成的。只是个主意。祝你好运。@QuaDECH你应该把它裁剪到调试阶段,也就是说,你应该找出bug的位置,而不是看着一个巨大的脚本发牢骚。谢谢大家的建议和对我的容忍。谢尔特的建议最终奏效了。在mount命令之后,我将sleep设置为0.05,在15个测试中,有一个测试出现了故障。现在我知道了问题的症结所在,我想我可以自己动手解决了。但再次感谢你的建议。