美文网首页
#! /bin/bash

#! /bin/bash

作者: 张培_ | 来源:发表于2020-10-27 23:48 被阅读0次

    background

    你可能经常会在一个shell script file(.sh文件),或者一个写满shell scirpt的text文件的开头看到这样一行代码:

    #! /bin/bash -xe
    

    为什么要写这么一行代码? 不写可以吗? 写了有什么效果呢?

    What is shell script?

    shell script其实就是一组可以被一起执行的shell command,这个shell script可以被写在一个.sh文件中,也可以被写在一个text文件中。

    shell script需要被UNIX/UNIX-like sh 执行,这里的sh就被称作command line interpreter(命令行翻译员)

    What is shell?

    shell是一个介于用户和OS之间的interface(接口),专门用来帮助用户访问操作系统。

    image.png

    What is sh、bash、zsh?

    刚刚提到sh是解释器、是shell command的执行者,根据上图可以看出,shell中的功能基本是由sh实现的。

    但是sh只是一种规范,定义了sh必须有的功能和规约。然而作为规范的sh必须就有真正的实现:

    通常我们常见的/bin/sh就是sh实现的软连接。
    你可能也会经常看到/bin/bash,看起来像是bash实现的软连接,那么bash是什么?

    bash开始的时候其实是sh的一种实现,但是随着需求越来越多,bash中又加入很多sh中并没有包含的功能,甚至bash中有一些行为会更改sh中的需求。因此并不能完全的说bash是sh的实现。

    当然zsh也是解释器,只不过是比bash功能更加强大的解释器。

    #! /bin/bash

    回到原题,经常出现在shell script file第一行的这段代码到底是什么意思呢?

    根据上面介绍的context,这个文件中的shell script需要被sh解释执行,但是sh的实现有多种,那么像这样的一行代码,其实是在告诉操作系统,应该sh的哪一个实现来执行下面的script。

    #! /bin/bash
    #! /bin/sh
    

    第一行是告诉操作系统,使用#! /bin/bash,使用这个路径下的sh实现来执行下面的shell scirpt

    第二行是告诉操作系统,使用#! /bin/sh,使用这个路径下的sh实现来执行下面的shell scirpt

    这第一行代码通常被称为hashbangshebang

    #! /bin/bash -ex

    我们知道了这行hashbang的作用,那么参数是-ex的作用是什么呢?

    #! /bin/bash -ex
    
    • -e: 如果shell command中的任何一行failed,整个shell script file的运行会在这个command处立刻终止。

    • -x: 在shell script的执行过程中,将command以及参数全部在标准输出中console出来

    更多的sh参数,你可以使用bash -c "help set" 查阅

    相关文章

      网友评论

          本文标题:#! /bin/bash

          本文链接:https://www.haomeiwen.com/subject/knwfvktx.html