Ksh
OpenBSD 的 sh:shebang 沒有被使用
我有三個腳本,其中兩個用作 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 的exec
、xargs(1)
、env(1)
或execvp(3)
其他一些模擬 shell 行為的包裝器。如果沒有記錄,您可以只查看原始碼。
無論如何,OpenBSD 就像除了 Linux 之外的大多數其他系統。AFAIK 只有 Linux 似乎支持其他腳本作為解釋器,最多 4 級限制,之後
execve
將失敗並顯示ELOOP
.