在shell脚本的开头往往有一句话来定义使用哪种sh解释器来解释脚本。
目前研发送测的shell脚本中主要有以下两种方式:
(1) #!/bin/sh
(2) #!/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后面的代码。
为什么会有这样的区别呢?
1. sh一般设成bash的软链
[work@zjm-testing-app46 cy]$ ll /bin/sh
lrwxrwxrwx 1 root root 4 Nov 13 2006 /bin/sh -> bash
2. 在一般的linux系统当中(如redhat),使用sh调用执行脚本相当于打开了bash的POSIX标准模式
3. 也就是说 /bin/sh 相当于 /bin/bash --posix
所以,sh跟bash的区别,实际上就是bash有没有开启posix模式的区别
so,可以预想的是,如果第一行写成 #!/bin/bash --posix,那么脚本执行效果跟#!/bin/sh是一样的(遵循posix的特定规范,有可能就包括这样的规范:“当某行代码出错时,不继续往下解释”)
http://hi.baidu.com/%BF%EC%C0%D6%C6%BB%B9%FB/blog/item/695509230f9aec48925807b2.html
分享到:
相关推荐
主要介绍了shell中source、sh、bash、./执行脚本的区别,需要的朋友可以参考下
人性化解析shell脚本,保证快速入门sh,bash,shell入门.pdf
结论一:脚本加上执行权限后,./.sh, sh ./.sh与bash ./*.sh相同,此三种执行脚本的方式都是重新启动一个子shell,在子shell中执行此
主要介绍了linux下csh, tcsh,bash, sh等shell的区别?,需要的朋友可以参考下
用于对 iOS 的 IPA 包进行重签名的 Bash 脚本(直接运行脚本重签)。
ubuntu执行.sh文件,1 .sh文件是Ubuntu下可执行文件,首先需要确定它的权限...注意:不可以用sh filename,因为在Ubuntu下,sh调用的事dash解释器,用./filename默认调用bash解释器,只要在文件开头加上: #!/bin/bash
Bash脚本编写中遇到的问题 Bash脚本编写中遇到的问题
thunar-custom-actions, Thunar ( 或者 Nautilus ) 文件管理器的[sh,bash] 自定义操作 Thunar自定义操作 以下操作也可以用于nautilus或者支持自定义操作的任何其他文件管理器。 我个人更喜欢Thunar因为速度。如果...
gdrive.sh:轻松下载文件或文件夹。 卷曲gdrive.sh | bash -s $ fileid
bash的副本.sh
Linux_theroy_bash、sh语法Linux_theroy_bash、sh语法Linux_theroy_bash、sh语法
linux bash shell脚本文件.sh,自动输入sudo的密码 在脚本中使用sudo命令,将密码保存在脚本中,不需要手动输入密码
Bash Line Editor-用纯Bash编写的功能齐全的行编辑...该脚本支持Bash 3.0或更高版本,尽管我们建议将ble.sh与Bash 4.0或更高版本一起使用。 当前,非ASCII字符仅支持UTF-8编码。 该脚本是在BSD许可下提供的(三节BSD l
pomodoro.sh :一个用bash编写的简单pomodoro应用程序 程式设计 VersionCompare.sh :比较两个版本号 公用事业 Encrypt.sh :使用密码加密文件/文件夹 Archive-and-encrypt.sh :将路径归档到文件中并对该文件进行...
pysh:Python增强的bash脚本,允许您编写bash脚本,其中包含Python代码的短片段以及在bash和Python之间共享的本地环境。
Bash是一个命令处理器,通常运行于文本窗口中...包括关键字、语法在内的基本特性全部是从sh借鉴过来的。其他特性,例如历史命令,是从csh和ksh借鉴而来。总的来说,Bash虽然是一个满足POSIX规范的shell,但有很多扩展。
Shell脚本经典案例,sh脚本语法参考,封装参考,SH脚本文件案例,BASH脚本文件参考,Linux脚本文件参考,sh脚本文件写法参考,SH脚本写法规范学习,bash脚本linux脚本规范学习,命令行管理工具封装,服务管理叫版本...
通过查看文档和自己的测试,bashdb-4.2.0-7 和centos7的bash-4.2.46版本匹配,并且编译顺利. 使用方法: 解压bashdb [root]#tar xf bashdb-4.2-0.7.tar.gz -C /usr/src...[root]#bash --debugger yourscript.sh var1 var2
bash-3.0-1.aix5.1.ppc.rpm bash-3.2-1.aix5.2.ppc.rpm rpm.rte 其中rpm.rte 为aix下支持rpm的程序包 大家也可以到这里去下载 http://www-03.ibm.com/systems/power/software/aix/linux/toolbox/download.html
当你的Win10系统出现Git Bash闪退时,需要该文件进行开启相关服务,可以参考我的博客进行解决。