Ksh

OpenBSD 的 sh:shebang 沒有被使用

  • September 4, 2021

我有三個腳本,其中兩個用作 shebang

  • shebang-1
#!/bin/sh
echo "#1"
exec sh -- "$@"
  • shebang-2哪個使用shebang-1
#!/home/a/ex/shebang-1
echo "#2"
exec sh -- "$@"
  • script
#!/home/a/ex/shebang-2
echo script...

當我執行script時,我期望

#1
#2
script...

相反,我只得到

$ ./script 
script...

明確地呼叫它們,

$ ./shebang-1 ./shebang-2 ./script
#1
#2
script...

文件具有以下權限

$ ls -l
total 24
-rwx------  1 a  a  38 Sep  3 18:00 script*
-rwx------  1 a  a  38 Sep  3 18:05 shebang-1*
-rwx------  1 a  a  50 Sep  3 18:05 shebang-2*

這裡有什麼問題?

OpenBSD 不支持解釋器本身就是 shebangs 中的 shebanged 腳本。解釋器必須是實際的二進製文件。

嘗試執行script失敗,ENOEXEC並且 shell 回退到以/bin/sh腳本作為第一個參數執行,如文件所述。

您可以通過嘗試直接執行腳本來檢查這一點execve(2),而不是通過 shell、perl 的execxargs(1)env(1)execvp(3)其他一些模擬 shell 行為的包裝器。

如果沒有記錄,您可以只查看原始碼

無論如何,OpenBSD 就像除了 Linux 之外的大多數其他系統。AFAIK 只有 Linux 似乎支持其他腳本作為解釋器,最多 4 級限制,之後execve將失敗並顯示ELOOP.

引用自:https://unix.stackexchange.com/questions/667548