2017-08-14 157 views
-1

我在KSH中编写了一个交互式shell脚本,其中有一个主菜单,其中的选项将不同的函数作为代码片段存储在单独的文件中。交互式shell脚本:递归太深

该脚本工作正常,但经过一段时间的脚本“递归太深”

有它发生时没有明显的模式退出,它可以发生在使用任何功能,在任何时间。唯一明确的模式是,我使用脚本的时间越长,导致错误的可能性就越大。

在脚本中没有递归函数,所以我假设我创建了一段时间后变得太大的回调循环。

是否有我可以调用的函数将清除已建立的任何代码队列? (我是新来的shell脚本 - 我记得在jQuery的动画的clearQueue功能)

我试图找到没有成功回调循环,这样一个解决方法是诱人的

感谢

+1

一旦功能处理无论你想要做什么任务,然后会发生什么,再次调用“菜单”功能?然后你有一个间接递归的“菜单”功能,它迟早会变得很深。尝试使用循环来显示菜单。 –

+0

是的,在每个任务函数结束时,它调用菜单函数。恐怕我不明白为什么这会导致递归累积...我不确定你的意思是使用循环调用菜单而不是回调......这将如何看待?对于信息我的菜单包括回应菜单列表,有一个输入设置选择变量,然后一堆如果行动。如果这一切都被反复调用,那么所有这些如果最终会堆叠起来呢? –

+0

然后只是改变,让任务函数静静地退出,并返回到菜单功能,然后循环显示菜单并要求再次选择。 –

回答

0

原来的递归误差是因为我是采购文件的次数太多而超出文件操作限制

我重写,所以我只有对源文件的一次,这是罚款

1

在伪代码一旦do_task_1完成后,你可以不喜欢

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

,函数或脚本或不管它是回报,而case声明结束,并且循环迭代打印菜单,并获得我再次输入。

+0

谢谢,这里有很多我不熟悉的东西 - 我在工作中被限制在一个甚至不允许任何bash的老Korn Shell中,但是你指出了我的正确方向。我已经找到了ksh中的select循环,我也会应用它。 –