所以我知道我可以将 she-bangs 更改为,#!/usr/bin/env bash并且我将为我的脚本执行此操作,但实际上我希望能够使用#!/bin/bashshe-bang 运行许多脚本。有时很容易更改,有时则不然,因为脚本是由其他东西运行的,而不是由您直接运行,并且它位于您真正不想触及的地方。
我可以在系统配置中启用一些选项来获取链接/bin/bash,还有什么原因我不应该这样做,为什么这不是标准?(请不要告诉我有关滑坡的事情,/bin/bash这可能是对 Unix 系统最常见的假设之一)
标准 POSIX shell 是sh,不是bash。因此,您可以假设 POSIX 系统将有一个可用且名为 的 bourne 兼容 shell sh,但没有理由假设它们已经bash安装,也没有理由假设它会位于/bin/bash。事实上,POSIX 规范sh甚至不需要/bin/sh:
应用程序应注意,shell 的标准 PATH 不能假定为 /bin/sh 或 /usr/bin/sh,并且应通过询问 getconf PATH 返回的 PATH 来确定,确保返回的路径名是绝对路径名路径名而不是内置的 shell。
例如,要确定标准 sh 实用程序的位置:
Run Code Online (Sandbox Code Playgroud)command -v sh在某些实现上,这可能会返回:
Run Code Online (Sandbox Code Playgroud)/usr/xpg4/bin/sh此外,在支持可执行脚本(“#!”构造)的系统上,建议使用可执行脚本的应用程序使用 getconf -v 来安装它们,以确定 shell 路径名并更新“#!” 在安装时适当地编写脚本(例如,使用 sed)。
/bin/bash所以不标准的原因就是bash不标准。这正是env存在的原因,也是#!/usr/bin/env bash此类事情的便携式解决方案的原因。
也就是说,如果这是您的系统,那完全取决于您。没有理由不添加一个符号链接来/bin/bash指向您的bash安装位置。例如,如果您bash位于/usr/bin,您只需打开 root shell 并运行:
ln -s /usr/bin/bash /bin/bash
Run Code Online (Sandbox Code Playgroud)
只要您拥有该系统,或者您通过本地系统管理员清除了该系统,就应该没有问题。
| 归档时间: |
|
| 查看次数: |
4979 次 |
| 最近记录: |