首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenBSD的sh: shebang没有被使用

OpenBSD的sh: shebang没有被使用
EN

Unix & Linux用户
提问于 2021-09-03 22:07:57
回答 1查看 251关注 0票数 2

我有三种脚本,其中两种被用作杂音。

  • shebang-1
代码语言:javascript
复制
#!/bin/sh
echo "#1"
exec sh -- "$@"
  • shebang-2,它使用shebang-1
代码语言:javascript
复制
#!/home/a/ex/shebang-1
echo "#2"
exec sh -- "$@"
  • script
代码语言:javascript
复制
#!/home/a/ex/shebang-2
echo script...

当我执行script时,我希望

代码语言:javascript
复制
#1
#2
script...

相反我只得到

代码语言:javascript
复制
$ ./script 
script...

显式地调用它们,

代码语言:javascript
复制
$ ./shebang-1 ./shebang-2 ./script
#1
#2
script...

文件具有以下权限

代码语言:javascript
复制
$ 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*

这里有什么问题?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2021-09-03 23:09:36

OpenBSD不支持解释器,而解释器本身就是shebangs中的带片式脚本。口译员必须是实际的二进制文件。

尝试使用script执行ENOEXEC失败,而shell返回到以脚本作为第一个参数的运行/bin/sh,如文档所述。

您可以通过尝试通过execve(2)直接运行脚本,而不是通过shell、perl的execxargs(1)env(1)execvp(3)或其他类似于shell行为的包装器来检查这一点。

如果没有文档化,您只需查看源代码即可。

无论如何,OpenBSD和大多数其他系统一样,除了Linux之外;只有Linux才支持其他脚本作为解释器,最多可以达到4个级别,之后execve就会在ELOOP上失败。

票数 6
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/667548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档