我应该使用哪种shebang线?

时间:2017-08-14 19:38:20

标签: bash shell unix

我的项目中有一些脚本运行良好,没有第一行(如#!/bin/) - 没有任何解释器路径。

所以这些脚本运行正常,在某些情况下它们会失败,但是当它们运行时 - 它们执行得很好。

我需要修改并将shell解释器作为第一行。

这里的问题是,当我使用#!/bin/ksh时,某些脚本会失败,而当我使用#!/bin/bash时其他脚本会失败。

谁能告诉我何时使用哪个选项?

我如何确保它们能够正常工作,以及任何其他方式来概括并使解释器对所有脚本都通用?

2 个答案:

答案 0 :(得分:2)

每个脚本都是用某种编程语言编写的 - bash,ksh,zsh,python,Perl ....你不能编写Python程序并希望Perl可以运行它。类似地,ksh程序需要由bsh执行bsh程序ksh执行。

现在,由于bash,ksh,zsh和Posix shell do 具有公共子集,因此可以使用任何这些命令处理器执行它。如果 - 而且只有! - 你确定这适用于这些脚本,我建议使用Posix shell,因为这是最严格的一个。

但是如果人们将脚本指定为bash或ksh,或者其他什么,脚本的维护者可能迟早会使用仅对其中一种shell语言特有的功能。当然你可以要求每个人都在编程,比如说ksh,但这是一个政治问题,而不是技术问题。

答案 1 :(得分:0)

是否使用bashksh是一个意见问题。但是,当#!丢失时,会使用/bin/sh的默认shell(或者,我认为假定到; bash似乎执行脚本使用bash。),以及该shell的工作方式由POSIX标准定义。如果编写符合该标准的shell代码,则可以使用任何 POSIX兼容的shell(bashkshdash等执行它。)并且在每种情况下都期望得到相同的结果。

如果选择使用特定于给定shell的功能,则需要确保使用该shell执行脚本。使用特定于ksh的功能的脚本无法正常运行,例如,在bash