什么是首选Bash shebang?
对于大多数用途,是否有任何Bash
shebang客观上比其他Bash
更好?
#!/usr/bin/env bash
#!/bin/bash
#!/bin/sh
#!/bin/sh -
我隐约记得很久以前,听到最后添加破折号会阻止某人将命令传递给脚本,但无法找到任何细节。
您应该使用#!/usr/bin/env bash
以实现可移植性:不同的* nixes将bash
放在不同的位置,并且使用/usr/bin/env
是解决方法来运行PATH
上的第一个bash
。 sh
不是bash
。
/bin/sh
通常是系统默认shell的链接,其中许多或大部分地方都是/usr/bin/bash
。 但是,原始的Bourne shell是sh
,所以如果你的脚本使用了一些bash
(第二代,“Bourne Again sh”),那么你应该更具体一些,并使用后者。 这样,在没有安装bash的系统上,脚本不会运行。
我知道可能会有关于这种演变的电影三部曲令人兴奋......但这可能是传闻。
使用shebang行来调用适当的解释器不仅仅适用于BASH。 您可以将shebang用于系统上的任何解释型语言,例如Perl,Python,PHP(CLI)等等。 顺便说一下,shebang
#!/bin/sh -
(它也可以是两个破折号,即--
)结束bash选项之后的所有内容将被视为文件名和参数。
使用env
命令可使脚本便携,并允许为脚本设置自定义环境,因此可以使用便携式脚本
#!/usr/bin/env bash
或者适用于Perl等语言
#!/usr/bin/env perl
请务必查看bash
的man
页:
man bash
和env
:
man env
注意:在Debian和基于Debian的系统,如Ubuntu, sh
链接到dash
不bash
。 由于所有系统脚本都使用sh
。 据Debian称,这可以让bash增长并且系统保持稳定。
此外,为了保持调用* nix,就像我从不在shebang调用的脚本上使用文件扩展名一样,因为您不能像在Windows上那样在可执行文件上调用时忽略扩展名。 文件命令可以将其识别为脚本。
链接地址: http://www.djcxy.com/p/17469.html