iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Shell编程之/bin/bash和/bin/sh的区别浅析
  • 187
分享到

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

2024-04-02 19:04:59 187人浏览 八月长安
摘要

目录前言正题注意补充:Docker容器使用/bin/bash命令总结前言 早期,学过shell的5种启动方式,学的没有那么深入。从而导致了想深究一下docker exec 命令为什么

前言

早期,学过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区别内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Shell编程之/bin/bash和/bin/sh的区别浅析

本文链接: https://www.lsjlt.com/news/164658.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Shell编程之/bin/bash和/bin/sh的区别浅析
    目录前言正题注意补充:docker容器使用/bin/bash命令总结前言 早期,学过shell的5种启动方式,学的没有那么深入。从而导致了想深究一下docker exec 命令为什么...
    99+
    2022-11-13
  • Linux shell脚本开头#!/bin/bash和#!/bin/sh分析与区别是什么
    Linux shell脚本开头#!/bin/bash和#!/bin/sh分析与区别是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。很多人都误以为Linux中shell脚...
    99+
    2023-06-28
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作