Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux BASH循环的递归_Linux_Bash_Loops_For Loop - Fatal编程技术网

Linux BASH循环的递归

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

我还有一个问题。这段代码是为我正在制作的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 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个测试中,有一个测试出现了故障。现在我知道了问题的症结所在,我想我可以自己动手解决了。但再次感谢你的建议。