Shell编程之/bin/bash和/bin/sh的区别浅析

 更新时间:2022年07月19日 15:43:21   作者:血煞长虹  
在redhat的系统中,sh是一个到bash的软链接,但是如果运行如下程序会产生不一样的结果,下面这篇文章主要给大家介绍了关于Shell编程之/bin/bash和/bin/sh的区别的相关资料,需要的朋友可以参考下

前言

早期,学过shell的5种启动方式,学的没有那么深入。从而导致了想深究一下docker exec 命令为什么tomcat容器用/bin/bash,nginx容器却用/bin/sh,被这个问题,折腾了半天!

从/bin/bash,就是进入不了nginx容器,由此引发了一系列的排查。如果你对,docker的这个错误感兴趣,点击进入

正题

简单的讲,/bin/sh是早期版本,是一种便携方式的解释性脚本语言,自带有posix便携式功能,以该方式声明的脚本,脚本中间发生错误会终止脚本的运行,不再运行下面的代码。

/bin/bash,是/bin/sh的升级版,默认没有开启posix便携模式,所以以/bin/bash声明的脚本,中间即使发生错误,依然会继续向下运行。

也就是说:shell脚本,第一行写成 #!/bin/bash --posix,脚本执行效果跟#!/bin/sh是一样的。

可以简单的认为:

/bin/sh ==等价于== /bin/bash  --posix

注意事项(重要):

假设你编写了一个shell脚本,如下: 

#!/bin/bash
echo hello

正常情况下,我们执行这个脚本,会写作 ./test.sh,然后回车,但是很不幸,你不是很了解shell脚本的5种运行方式的差异,随手使用的运行方式是 sh test.sh,那么

即使在test.sh脚本中指定了#!/bin/bash,但仍然是使用/bin/sh执行test.sh,中间发生错误,依然会终止运行。

注意

你日常所使用的/bin/sh可能是个假shell(它是bash的软链接),它的真身很可能是/bin/bash,也就是说,如果你使用了/bin/sh它的本质是#!/bin/bash  --posix。

何以得知?通过man sh 和man bash,就看出来了,他们展示的内容几乎是一模一样。

也就是说,在新版本的Linux内核中,老的sh已经被后来者bash整合了。

补充:docker容器使用/bin/bash命令

问题描述

本地运行命令和docker运行命令的解释器不同,在本地已经是/bin/bash,但是docker中仍然是/bin/sh,需要修改docker中/bin/sh为/bin/bash

解决方案

1、首先看docker容器的详细信息。输入“docker container ls |grep xxxx”,看其中的命令部分,如果是“/bin/sh”说明使用的不一定是bash,可能是dash解释器。

使用命令ls -l /bin/sh,如果显示的是/bin/sh -> dash,说明用的是dash

2、在DockerFile中修改CMD部分,将其设置为/bin/bash

#原先命令
CMD ./start.sh

#修改为
CMD ["/bin/bash", "-c", "./start.sh"]

总结

到此这篇关于Shell编程之/bin/bash和/bin/sh区别的文章就介绍到这了,更多相关Shell /bin/bash和/bin/sh区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Bash脚本中括号和反引号的使用

    Bash脚本中括号和反引号的使用

    我们经常需要引用变量或者命令的执行结果来作为文件的名字或者日志的输出,本文主要介绍了Bash脚本中括号和反引号的使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • shell -z和-n的使用区别

    shell -z和-n的使用区别

    本文将深入探讨shell命令中的-z和-n选项,通过详细解释这两个选项的工作原理和用途,帮助读者更好地理解和掌握Shell脚本编写,感兴趣的可以了解一下
    2024-01-01
  • linux shell输出换行简单实例

    linux shell输出换行简单实例

    这篇文章主要给大家介绍了关于linux shell输出换行的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-02-02
  • Linux CLI操作常用快捷键总结

    Linux CLI操作常用快捷键总结

    下面小编就为大家带来一篇Linux CLI操作常用快捷键总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 一个简单的linux命令 tail

    一个简单的linux命令 tail

    这篇文章主要介绍了一个简单的linux命令tail,tail命令用来从指定点开始将文件写到标准输出,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • shell 编程中空格的使用方法

    shell 编程中空格的使用方法

    这篇文章主要介绍了shell 编程中空格的使用方法,需要的朋友可以参考下
    2015-01-01
  • Linux bc命令实现数学计算器

    Linux bc命令实现数学计算器

    这篇文章主要介绍了Linux bc命令实现数学计算器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • vim快捷键大全

    vim快捷键大全

    vi(vim)是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi(vim)。这篇文章主要介绍了vim快捷键大全的相关资料,需要的朋友可以参考下
    2016-10-10
  • shell 脚本之用ab每隔30分钟并发一次休息10分钟

    shell 脚本之用ab每隔30分钟并发一次休息10分钟

    这篇文章给大家分享如何使用shll解决用ab每隔30分钟并发一次休息10分钟,需要的朋友可以参考下
    2019-11-11
  • Linux Shell中的特殊符号和含义简明总结(包含了绝大部份)

    Linux Shell中的特殊符号和含义简明总结(包含了绝大部份)

    这篇文章主要介绍了Linux Shell中的特殊符号和含义简明总结,本文汇总了包含了绝大部份的Shell特殊符号,对每一个符号的作用做了总结,需要的朋友可以参考下
    2014-06-06

最新评论