一个关于`#!`如何处理程序参数的实际情况的惊喜
A surprise with how '#!' handles its program argument in practice

原始链接: https://utcc.utoronto.ca/~cks/space/blog/unix/ShebangRelativePathSurprise

禁止 您没有权限访问此服务器上的 /~cks/space/blog/unix/ShebangRelativePathSurprise。

## Hacker News 讨论总结:Shebang 行为与嵌套解释器 一场 Hacker News 讨论围绕脚本中 shebang (`#!`) 行的意外行为展开,特别是关于程序参数的处理方式以及“嵌套解释器”的可能性。最初的帖子指出,OpenBSD 不允许在脚本中使用 shebang 直接调用解释器,而 Linux 允许。 用户探讨了限制和解决方法,并指出使用 `#!/usr/bin/env <解释器>` 通常更具可移植性。讨论延伸到这种行为的历史原因(可能是在较旧系统上的性能优化)、安全考虑(PATH 中潜在的恶意可执行文件)以及 POSIX 标准(该标准*不要求* `/bin/sh` 或 `/usr/bin/env`)。 许多评论者分享了在 NixOS、macOS 和各种 Linux 发行版上的经验,强调了解释器位置的不一致性以及可移植性的重要性。对话还涉及虚拟环境的使用以及明确定义解释器路径以实现可重现性的好处。最终,讨论强调了 shebang 行的复杂性以及便利性和稳健性之间的权衡。
相关文章

原文

Forbidden

You don't have permission to access /~cks/space/blog/unix/ShebangRelativePathSurprise on this server.

联系我们 contact @ memedata.com