Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.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
交互式shell脚本:递归太深_Shell_Recursion - Fatal编程技术网

交互式shell脚本:递归太深

交互式shell脚本:递归太深,shell,recursion,Shell,Recursion,我用KSH编写了一个交互式shell脚本,有一个主菜单,其中的选项调用不同的函数,这些函数作为代码片段存储在不同的文件中 该脚本工作正常,但过了一段时间后,脚本退出时出现“递归太深” 没有明显的模式表明它何时发生,它可以在任何时候使用任何函数发生。唯一清楚的模式是,我使用脚本的时间越长,导致错误的可能性就越大 脚本中没有递归函数,因此我假设我正在某个地方创建一个回调循环,过了一段时间后它会变得太大 我是否可以调用一个函数来清除任何已建立的代码队列?(我不熟悉shell脚本——我记得jquery动

我用KSH编写了一个交互式shell脚本,有一个主菜单,其中的选项调用不同的函数,这些函数作为代码片段存储在不同的文件中

该脚本工作正常,但过了一段时间后,脚本退出时出现“递归太深”

没有明显的模式表明它何时发生,它可以在任何时候使用任何函数发生。唯一清楚的模式是,我使用脚本的时间越长,导致错误的可能性就越大

脚本中没有递归函数,因此我假设我正在某个地方创建一个回调循环,过了一段时间后它会变得太大

我是否可以调用一个函数来清除任何已建立的代码队列?(我不熟悉shell脚本——我记得jquery动画中的clearQueue函数)

我试图找到回调循环,但没有成功,所以一个变通方法很诱人


谢谢

在伪代码中,您可以执行以下操作

while true; do
    print_menu
    val=get_input
    case $val in
        1)
            do_task_1
            ;;
        ; etc...
    end
done

一旦
do\u task\u 1
完成,函数或脚本或它返回的任何内容,并且
case
语句结束,循环重复打印菜单并再次获取输入。

结果表明,递归错误是因为我太多次寻找文件,并且超过了文件运算符限制


我重写了它,所以我只需编写一次源文件,这很好

一旦处理您想要的任何任务的函数完成后,会发生什么,是否再次调用“菜单”函数?然后你有一个“菜单”函数的间接递归,它迟早会深入。尝试使用循环来显示菜单。是的,在每个任务函数结束时,它调用菜单函数。恐怕我不明白为什么这会导致递归的累积。。。我不知道你用循环调用菜单而不是回拨是什么意思。。。那看起来怎么样?对于info,我的菜单包括回显菜单列表,设置选择变量的输入,然后设置一组操作的“如果”。如果这些都被重复调用,那么所有的“如果”都会堆积起来吗?然后只需更改它,任务函数就会自动退出,并返回到菜单函数,然后它会循环显示菜单并再次请求选择。我想我知道你的意思-我会给它一个目标我不明白。你能解释一下为什么从循环中调用菜单与从任务结束函数中调用菜单有不同的影响吗?谢谢,其中有很多我不熟悉的地方——我在工作时被限制在一个甚至不允许任何bash的旧Korn Shell中,但你为我指明了正确的方向。我在ksh中找到了select循环,我也将应用它。