带有绝对路径的shebang是默认(POSIX)吗?

弗拉维奥

编辑: 问题和答案是正确的,但我在这里所说的问题不是。维护者实际上拒绝使用它/usr/bin/env作为解决方案,而是重新创建了该脚本sh,这样做破坏了其他用户的安装。因此,env用于查找bash不是POSIX,而是默认“足够”以被视为标准。

我在nixos(特别是haskell堆栈上安装软件时遇到一些错误,并且在Internet上进行了一些挖掘之后,我发现了一些人在安装软件的特定路径方面遇到问题的示例。在此示例中,维护人员将修改恢复为/usr/bin/env查找bash解决方案,因为它破坏了其他用户的安装。

因此,env在没有通知安装绝对路径的情况下(依赖系统搜索路径)引用shebang可能被认为是错误的吗?

我的意思是可以使用

#!env bash

代替

#!/usr/bin/env bash

如果env不是在所有系统上默认安装的绝对路径都是默认的?

吉勒斯“别再邪恶了”

env存在于/usr/bin几乎所有的类Unix仍处于21世纪的现存系统。我知道的两个例外是SCO OpenServer(仍为一些非常老的服务器提供支持)和NextSTEP(没有太多支持的硬件,这些硬件还没有消失)。为了便于携带,请使用#!/usr/bin/env其他任何东西都不那么可移植(除非#!/bin/sh,它有自己的问题,并且仅当您计划在SCO上运行脚本时才有用)。

POSIX和单一Unix没有定义/usr/bin/env,或者/bin/sh,或者任何绝对路径以外//tmp以及在几个条目/dev/usr/bin/env它不是正式的Unix标准,但实际上是一个事实上的标准。

#!env是完全没用的。Shebang查找不使用PATH变量,而是由内核完成的。(如果它执行了PATH查找,那么您不妨#!bash直接编写

#!/usr/bin/env bash对于bash脚本来说是完美的选择,我质疑拒绝更改的维护者的智慧#!/bin/bash看起来维护者被请求打扰了,然后并没有非常认真地对待它。更改为使用标准sh而不是bash更好地实现了可移植性,但显然没有用(脚本可能还有一个非标准的构造)。如果无法将脚本转换为可在其他Shell中使用#!/usr/bin/env bash则应仍将脚本更改为使用而不是#!/bin/bash

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章