什么是首选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上的第一个bashsh不是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
    

    请务必查看bashman页:

    man bash
    

    env

    man env
    

    注意:在Debian和基于Debian的系统,如Ubuntu, sh链接到dashbash 。 由于所有系统脚本都使用sh 。 据Debian称,这可以让bash增长并且系统保持稳定。

    此外,为了保持调用* nix,就像我从不在shebang调用的脚本上使用文件扩展名一样,因为您不能像在Windows上那样在可执行文件上调用时忽略扩展名。 文件命令可以将其识别为脚本。

    链接地址: http://www.djcxy.com/p/17469.html

    上一篇: What is the preferred Bash shebang?

    下一篇: Difference between single and double quotes in Bash