2017-08-14 142 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循環,我也會應用它。 –