一个关于`#!`如何处理程序参数的实际情况的惊喜
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 的讨论揭示了类 Unix 系统中“#!”(shebang)行的一种令人惊讶的行为。虽然通常与解释器的完整路径一起使用(例如 `#!/usr/bin/bash`),但仅仅使用解释器名称(例如 `#!bash`)*有时*有效,但可靠性不一致。 具体来说,它在 Zsh 中有效,但在 Bash 中失败。这是因为 Zsh 会在内核不处理 shebang 时自行处理它,而 Bash 不会。 讨论强调了由此产生的可移植性问题,用户指出在 NixOS 上存在问题,因为 NixOS 的路径通常非常规。 普遍的共识倾向于使用 `#!/usr/bin/env bash` 作为最可移植的解决方案,确保通过系统的 `$PATH` 找到解释器。 尽管存在简化潜力,但由于存在破坏依赖于当前实现的现有脚本的风险(赫鲁姆定律),改变内核的行为不太可能。
相关文章

原文

Forbidden

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

联系我们 contact @ memedata.com