shell脚本头,#!/bin/sh与#!/bin/bash的区别.
因为今天写了个小脚本,死活不成功,总是报文件或者目录不存在,问了一下我们马同学的正常写法,发现只有脚本头的区别,也就是今天本文要讲的#!/bin/sh与#!/bin/bash.
本文参考:https://www.cnblogs.com/aaronLinux/p/6885288.html和http://www.cnblogs.com/baizhantang/archive/2012/09/11/2680453.html
一:解释
#!/bin/sh
是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面跟的是此解释此脚本的shell的路径。
$ cat /etc/shells
可以查看系统支持的shell格式
其实第一句的#!是对脚本的解释器程序路径,脚本的内容是由解释器解释的,我们可以用各种各样的解释器来写对应的脚本。
比如说/bin/csh脚本,/bin/perl脚本,/bin/awk脚本,/bin/sed脚本,/bin/python脚本,甚至/bin/echo等等。
** #!/bin/bash
**同理。
二:区别
脚本test.sh内容:
#!/bin/sh
source pcy.sh #pcy.sh并不存在
echo hello
执行./test.sh,屏幕输出为:
./test.sh: line 2: pcy.sh: No such file or directory
由此可见,在#!/bin/sh的情况下,source不成功,不会运行source后面的代码。
修改test.sh脚本的第一行,变为#!/bin/bash,再次执行./test.sh,屏幕输出为:
./test.sh: line 2: pcy.sh: No such file or directory
hello
由此可见,在#!/bin/bash的情况下,虽然source不成功,但是还是运行了source后面的echo语句。
但是紧接着我又试着运行了一下sh ./test.sh
,这次屏幕输出为:
./test.sh: line 2: pcy.sh: No such file or directory
表示虽然脚本中指定了#!/bin/bash,但是如果使用sh 方式运行,如果source不成功,也不会运行source后面的代码。
为什么会有这样的区别呢?
junru同学作了解释
- sh一般设成bash的软链
[work@zjm-testing-app46 cy]$ ll /bin/sh
lrwxrwxrwx 1 root root 4 Nov 13 2006 /bin/sh -> bash
- 在一般的linux系统当中(如redhat),使用sh调用执行脚本相当于打开了bash的POSIX标准模式
- 也就是说 /bin/sh 相当于 /bin/bash --posix
所以,sh跟bash的区别,实际上就是bash有没有开启posix模式的区别
so,可以预想的是,如果第一行写成#!/bin/bash --posix
,那么脚本执行效果跟#!/bin/sh
是一样的(遵循posix的特定规范,有可能就包括这样的规范:“当某行代码出错时,不继续往下解释”)
转载于:https://www.cnblogs.com/jonnyan/p/8798364.html
shell脚本头,#!/bin/sh与#!/bin/bash的区别.相关推荐
- shell脚本开头#!/bin/bash和#!/bin/sh是什么意思以及区别
一直以为在shell脚本中#都是代表着注释功能,同样在脚本开始的#!/bin/sh也只是告诉用户这是一个shell脚本,而最近顺手查了下,才发现不是这个意思,分享下面的文章. 一.意思 #!/bin/ ...
- Shell脚本中:#!/bin/bash和#!/bin/sh是什么意思以及区别?
意思:#!/bin/sh是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面跟的是解释此脚本的shell的路径. 其实第一句的#!是对脚本的解释器程序路径,脚本的内容是由解释器解释的,我 ...
- [shell]Linux脚本开头#!/bin/bash和#!/bin/sh是什么意思以及区别
一直以为在shell脚本中#都是代表着注释功能,同样在脚本开始的#!/bin/sh也只是告诉用户这是一个shell脚本,而最近顺手查了下,才发现不是这个意思,分享下面的文章. 转自:http://ww ...
- Linux脚本开头#!/bin/bash和#!/bin/sh是什么意思以及区别
Linux脚本开头#!/bin/bash和#!/bin/sh是什么意思以及区别 一.意思 #!/bin/sh是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面根的是此解释此脚本的she ...
- 关于#!/bin/sh 和 #!/bin/bash 的差别
在shell脚本的开头往往有一句话来定义使用哪种sh解释器来解释脚本. 目前研发送测的shell脚本中主要有以下两种方式: (1) #!/bin/sh (2) #!/bin/bash 在这里求教同福客 ...
- #!/bin/sh与#!/bin/bash的区别
Linux 中的 shell 有很多类型,其中最常用的几种是: Bourne shell (sh).C shell (csh) 和 Korn shell (ksh), 各有优缺点.Bourne she ...
- #!/bin/bash和#!/bin/sh是什么意思以及区别
尊重原著,著明:本帖为优秀的帖子整合 一.意思 #!/bin/sh是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面根的是此解释此脚本的shell的路径. 其实第一句的#!是对脚本的解 ...
- Petalinux建立工程时出现WARNING: /bin/sh is not bash!的解决方法
出现(WARNING: /bin/sh is not bash!)如何解决 在运行命令: @ubuntu$:source /opt/pkg/petalinux/settings.sh` ` 时候出现以 ...
- 解决:/system/bin/sh: /system/bin/test-ndk: not executable: magic 7F45报错
在夜神模拟器运行arm编译器编译出来的可执行文件,结果报错: /system/bin/sh: /system/bin/test-ndk: not executable: magic 7F45查了一下, ...
最新文章
- 阿里云新一代关系型数据库 PolarDB 剖析
- 【设计和算法分析】3、二进制搜索
- 06-CABasicAnimation基础核心动画
- html5 填表 表单 input output 与表单验证
- mysql变量赋值加冒号_C语言变量声明加冒号的用法(占位符)
- shell命令删除昨日的日志_linux定时自动清理日志文件
- mac连接ubuntu,tomcat乱码
- 怎样能让电脑干干净净的没有各种弹窗广告?
- mysql管理数据 并上传至云端_西部数码网站管理助手创建、导入恢复、导出备份mysql数据库...
- 分类问题的label为啥必须是 one hot 形式?
- Protobuf C++类中成员函数GetCachedSize()与ByteSize()的区别
- php swfupload,ThinkPHP+swfupload多图上传实例 经典实用的php多图上传
- 第五章:优势策略均衡
- 【C语言】 《弹跳的小球》游戏编写过程及思路,清屏函数、Sleep()函数的应用
- 三大运营商充话费送手机,里面的套路太深
- Magento2.1x常见报错处理
- 如何通过结构分析法分析数据?
- 憨牛女装旗舰店开业啦!
- cad老是弹出命令中发生异常_CAD打开出现向程序发送命令时出现错误该怎么办?...
- Vue中使用百度地图做路径分析并根据起终点坐标模拟道路里程桩
热门文章
- sass笔记 - 实战中颜色的玩法总结
- linux异构内存,Linux内核添加异构内存管理(HMM)将带来加速GPU的新方式,还有可能带来其他类型的机器学习硬件。...
- 姿态坐标c语言,判断 AR 中坐标系的姿态和位置的简单方法
- cmake mysql 参数_MySQL cmake编译时这些参数是什么意思?-问答-阿里云开发者社区-阿里云...
- 用mysql web建立论坛_在web1上搭建Discuz论坛
- python中的多态用法_Python面向对象之多态原理与用法案例分析
- 手把手教你0基础C语言速通
- html form中多个div,在react里最多只能有几个div
- uoj#267. 【清华集训2016】魔法小程序(乱搞)
- Oracle报错:“ORA-02292:违反完整约束条件(XXX.FKXXX)- 已找到子记录