Last Updated on 2023-12-30 by Clay
問題描述
/bin/bash: warning: shell level (1000) too high, resetting to 1
這個錯誤我是在寫自動化腳本時遇到的。
我本來想要呼叫 /usr/bin
中的某個指令 x,然而因為我在使用者家目錄底下建立了另外一個 ~/bin
資料夾並將其加入了環境變數的路徑中,並且我在 ~/bin
底下又放了一個同樣名稱的 x (這裡叫它腳本 x)去呼叫指令 x —— 這造成了因為本地目錄的優先度比較高,我的腳本 x 呼叫的指令其實是呼叫腳本自己本身、腳本自己本身又會繼續呼叫自己...... 造成了無限迴圈。
這點真的是滿有意思的,我還是第一次觸發這樣的異常錯誤。
簡單來說,就是我希望 ~/bin/x 呼叫 /usr/bin/x 的指令去做一些事情,然而 ~/bin/x 卻一直呼叫 ~/bin/x 自自己;一旦這種情況發生,shell 的層級不斷累加,直到達到一個閾值(在預設的情況是 1000),則觸發了系統的警告 —— 就便成了我所看到的錯誤訊息。
解決方法
解決方法有兩種:一種是這真的是錯誤地遞迴呼叫腳本自己,這時候我們應該改掉呼叫自己的方法,比方說透過改變名稱等等。
你也可以檢查 ~/.bashrc 或是 ~/.bash_profile 等等設定檔,確認沒有指令存在衝突的現象。
但是另外一種情況是我們真的需要遞迴地呼叫自己,那該怎麼隱藏這個警告?
事實上,最好的解決方法仍然是在腳本中利用迴圈的方式去解決,不僅不會觸發警告,也更容易理解與控制。
References
- bash: warning: shell level (1000) too high, resetting to 1
- [SOLVED] bash warning shell level (1000) too high ...