對于背景關系:我正在閱讀這個可以用shebang做的詭計的例子。它用
#!/bin/rm
最終會洗掉您執行的檔案(非常有趣;您可以擴展它以創建自洗掉訊息)。這表明程式 ( rm) 是使用檔案名作為引數呼叫的,因此可以訪問整個檔案,包括呼叫它的 shebang。
我想出的另一個技巧是在 shebang 中呼叫自己作為解釋器來創建無限回圈。例如,如果/usr/bin/loop以
#!/usr/bin/loop
t 應該永遠用自己呼叫自己。顯然在某些時候會發生錯誤,在我的特殊情況下,我得到:
bash: /usr/bin/loop: /usr/bin/loop: bad interpreter: Too many levels of symbolic links
看起來它有兩個層次的深度。有人可以向我解釋為什么會發生這個特定錯誤嗎?或者可能為不同的 shell 共享一些其他錯誤訊息。
特別是我想了解為什么涉及符號鏈接以及這是否是 bash 的實作細節。
uj5u.com熱心網友回復:
為什么會發生此特定錯誤?
因為當內核嘗試運行可執行檔案時,嘗試運行/usr/bin/loop,然后嘗試運行/usr/bin/loop,然后嘗試運行/usr/bin/loop,等等,最后失敗并ELOOP出現錯誤。它會檢查。
https://elixir.bootlin.com/linux/latest/source/fs/exec.c#L1767
有一些針對不同外殼的其他錯誤訊息。
雖然它可能是,但這個特定的 errno 訊息來自 glibc strerror。
為什么涉及符號鏈接
因為ELOOP在執行輸入/輸出操作時通常會回傳,所以訊息會提到它們。不涉及符號鏈接。
這是否是 bash 的實作細節。
不是。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/455989.html
上一篇:Perl比較兩個檔案并列印出現
