我有三种脚本,其中两种被用作杂音。
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*这里有什么问题?
发布于 2021-09-03 23:09:36
OpenBSD不支持解释器,而解释器本身就是shebangs中的带片式脚本。口译员必须是实际的二进制文件。
尝试使用script执行ENOEXEC失败,而shell返回到以脚本作为第一个参数的运行/bin/sh,如文档所述。
您可以通过尝试通过execve(2)直接运行脚本,而不是通过shell、perl的exec、xargs(1)、env(1)、execvp(3)或其他类似于shell行为的包装器来检查这一点。
如果没有文档化,您只需查看源代码即可。
无论如何,OpenBSD和大多数其他系统一样,除了Linux之外;只有Linux才支持其他脚本作为解释器,最多可以达到4个级别,之后execve就会在ELOOP上失败。
https://unix.stackexchange.com/questions/667548
复制相似问题