zoukankan      html  css  js  c++  java
  • #!/bin/bash和#!/bin/sh的区别_Linux

    TOC

    #!/bin/bash和#!/bin/sh的区别_Linux

    参考:

    #!

    #!:是一个特殊的表示符,其后,跟着解释此脚本的shell路径。

    除第一行外,脚本中所有以“#”开头的行都是注释。

    • #!/bin/bash#!/bin/bash只能放在第一行,如果后面还有#!(只要不是在第一行),那么只能看成是注释。

      运行之前需要设置sh的运行权限chmod 777 *

    • 当source命令执行有问题时,bash继续执行下面命令。
    • 系统默认的shell是bash。
    • #!后面的路径一定要正确,不正确会报错(这个文件不会运行,提示路径不存在)。

    区别

    • /bin/sh指向dash,/bin/bash指向bash
    • dash相当于bash的精简版(dash不能使用let、source 等命令)

    我之前在有的博客上看到,说是 #!/bin/sh 的脚本,出错之后不会继续运行,#!/bin/bash的脚本,出错之后会继续运行,我在Ubuntu上试了一下...#!/bin/sh 的脚本还是继续运行了;

    若是想出错之后停止运行,在#!行之后添加一行set -e,这样出错之后脚本就会停止了


    GNU/Linux操作系统中的/bin/sh本是bash (Bourne-Again Shell) 的符号链接,但鉴于bash过于复杂,有人把bash从NetBSD移植到Linux并更名为dash (Debian Almquist Shell),并建议将/bin/sh指向它,以获得更快的脚本执行速度。Dash Shell 比Bash Shell小的多,符合POSIX标准。

    Ubuntu继承了Debian,所以从Ubuntu 6.10开始默认是Dash Shell。

    所以也就是在Ubuntu中可以认为/bin/sh就是/bin/dash, 如果打算使用bash, 可直接将/bin/sh软链接到/bin/bash.

    root@b3fe92a89f30:/# ll -h /bin/sh /bin/bash
    -rwxr-xr-x 4 root root 1.2M Feb 25 12:03 /bin/bash*
    lrwxrwxrwx 1 root root    4 Jul 18  2019 /bin/sh -> dash*

    应该说,/bin/sh/bin/bash虽然大体上没什么区别,但仍存在不同的标准。标记为#!/bin/sh的脚本不应使用任何POSIX没有规定的特性 (如let等命令, 但#!/bin/bash可以)。Debian曾经采用/bin/bash更改/bin/dash,目的使用更少的磁盘空间、提供较少的功能、获取更快的速度。但是后来经过shell脚本测试存在运行问题。因为原先在bash shell下可以运行的shell script (shell 脚本),在/bin/sh下还是会出现一些意想不到的问题,不是100%的兼用。

    上面可以这样理解,使用man sh命令和man bash命令去观察,可以发现sh本身就是dash,也就更好的说明集成Debian系统之后的更改。

    在Ubuntu上,/bin/sh类似/bin/bash的精简版,有不少功能不能用,Ubuntu默认是/bin/bash





  • 相关阅读:
    Checking Types Against the Real World in TypeScript
    nexus pip proxy config
    go.rice 强大灵活的golang 静态资源嵌入包
    几个golang 静态资源嵌入包
    rpm 子包创建学习
    Rpm Creating Subpackages
    ava 类似jest snapshot 功能试用
    ava js 测试框架基本试用
    The Architectural Principles Behind Vrbo’s GraphQL Implementation
    graphql-compose graphql schema 生成工具集
  • 原文地址:https://www.cnblogs.com/ziyue7575/p/eddd8990f7050f997fc74b73028530eb.html
Copyright © 2011-2022 走看看