推荐的POSIX SH Shebang是什么? [英] What is the recommended POSIX sh shebang

查看:23
本文介绍了推荐的POSIX SH Shebang是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我读到如果您想以可移植的方式使用Bash,您应该使用shebang:

#!/usr/bin/env bash

但现在我在想:当我想明确声明我不依赖于Bash,而是编写了一个符合POSIX的脚本时,我是否应该使用:

#!/bin/sh

还是#!/usr/bin/env sh在这里也更可取?

推荐答案

形式透视

POSIXrel="noreferrer">POSIX规范的信息性部分 sh:应用程序使用情况状态 您不能依赖安装在/bin/shsh可执行文件。

应用程序应注意,shell的标准路径不能 假定为/bin/sh/usr/bin/sh,,应为 由查询由返回的路径确定 getconf 路径,确保返回的路径名是绝对路径名,而不是 内置外壳。

例如,要确定标准sh实用程序的位置:

command -v sh
但是,不建议使用env来使用适当的路径, 它建议在安装时修改shell脚本以使用 sh的完整路径:

此外,在支持可执行脚本的系统上("<[2-7]") 构造),建议使用可执行脚本的应用程序 使用以下工具安装它们 getconf 路径确定shell路径名并更新"#!"脚本 在安装时适当(例如,使用 sed)。

实践中

我主要编写POSIX shell脚本,实际上,每个GNU/Linux系统 (基于Red Hat和Debian)-以及Cygwin和OS X等其他产品-有 符合shsh可以安装到/bin/sh,也可以作为软件或 此路径上的硬链接。我从来不需要使用env来满足系统需求 其中sh不使用此路径。

某些Unix系统可能无法使用符合POSIX的sh AS/bin/sh。POSIX规范建议将其安装在 有些系统如/usr/xpg4/bin/sh。据我所知,这是(曾经?)真的 对于Solaris系统,其中/bin/sh是Bourne shell的早期版本 它比POSIX更早。在这种情况下,使用env sh不一定有帮助,因为它仍然可以在/usr/xpg4/bin/sh处的POSIX shell之前找到Bourne shell(位于/bin/sh)。

摘要

如果您正在为常见的Unix和Linux操作编写POSIX shell脚本 系统,只需使用#!/bin/sh作为封套。

在极少数情况下,/bin/sh是Bourne shell而不是符合POSIX的 shell,则必须修改shebang以使用适当的完整路径。 到POSIX外壳。

在任何一种情况下,使用都没有好处-而且 与简单使用#!/bin/sh相比,更有可能失败。

这篇关于推荐的POSIX SH Shebang是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆