释伴:Linux 上的 Shebang 符号(#!)
来源:互联网 发布:淘宝网京东商城女装 编辑:程序博客网 时间:2024/04/29 09:50
使用Linux或者unix系统的同学可能都对#!这个符号并不陌生,但是你真的了解它吗?本文了将给你简单 介绍一下Shebang(”#!”)这个符号。
词源与历史
Shebang的名字来自于SHArp和bang,或haSH bang的缩写,指代Shebang中#!两个符号的典型Unix名称。 Unix术语中,井号通常称为sharp,hash或mesh;而叹号则常常称为bang。也有看法认为,shebang名字中的sh来自于默认shell Bourne shell的名称,sh,因为常常使用shebang调用之。
在2010年版的Advanced bash scripting guide(revision 6.2)中,shebang被称为"sha-bang",同时提到"也写作she-bang或sh-bang",但该文件中没有提到"shebang"这一形式。
丹尼斯·里奇在被问及他会如何称呼这一特性时,他答道:
发信人:"Ritchie, Dennis M (Dennis)** CTR **" <dmr@[redacted]>
收信人:<[redacted]@talisman.org>
日期:Thu, 19 Nov 2009 18:37:37 -0600
主题:RE: What do -you- call your #!<something> line?
我不记得我们曾经给它取过一个适当的名字。导入这一特性已经是相当晚了--我觉得我是从关于伯克利Unix的UCB会议上的某人那里得到的这一灵感;我可能是首先实现它的人之一,但这个创意是来自于别人的。
至于它的名字:可能是类似于"hash-bang"的英国风描述性文字,但我没有在任何场合使用类似宠物的名字来描述它。
此致,
Dennis
用法
Shebang这个符号通常在Unix系统的脚本中第一行开头中写到,它指明了执行这个脚本文件的解释程序。
1. 如果脚本文件中没有#!这一行,那么它执行时会默认用当前Shell去解释这个脚本(即:$SHELL环境变量)。
2. 如果#!之后的解释程序是一个可执行文件,那么执行这个脚本时,它就会把文件名及其参数一起作为参数传给那个解释程序 去执行。
3. 如果#!指定的解释程序没有可执行权限,则会报错“bad interpreter: Permission denied”。 如果#!指定的解释程序不是一 个可执行文件,那么指定的解释程序会被忽略,转而交给当前的SHELL去执行这个脚本。
4. 如果#!指定的解释程序不存在,那么会报错“bad interpreter: No such file or directory”。
注意:#!之后的解释程序,需要写其绝对路径(如:#!/bin/bash),它是不会自动到$PATH中寻找解释器的。
5. 当然,如果你使用”bash test.sh”这样的命令来执行脚本,那么#!这一行将会被忽略掉,解释器当然是用命令行中显式 指定的bash。
例如:test.sh
123
#!/bin/bashecho "hello, world."echo "hello, ${1}."
chmod a+x test.sh
./test.sh Jay (运行之时,其实是 /bin/bash ./test.sh Jay)
结果为:
hello, world.
hello, Jay.
- 释伴:Linux 上的 Shebang 符号(#!)
- 释伴:Linux 上的 Shebang 符号(#!)
- 释伴:Linux 上的 Shebang 符号(#!)
- Linux上的Shebang符号(#!)
- Linux上的Shebang符号(#!)
- Linux上的Shebang符号(#!)
- bash的shebang行
- Linux学习笔记2 shebang,ls,pwd,cd,type
- 键盘上的英文符号
- 键盘上符号的英文
- LINUX 的常用符号
- gnu linux 上ARM默认char是不带符号的。微软wince上char又默认是signed。
- 键盘上的符号的读法
- Linux 常用的符号含义
- PowerPC上ELF可执行文件的符号解析
- 4 解析未定义的符号(上)
- 键盘数字键上的符号记忆口诀
- linux 将数字符号画到BMP图片上
- POJ2230 Watchcow(欧拉回路)
- 《深入理解Android 卷III》第七章 深入理解SystemUI
- 几款开源的数据挖掘工具
- HDU 1828 Picture(线段树扫描线·周长并)
- 一些在3D打印机怎么使用中存在的小问题,帮你来解答
- 释伴:Linux 上的 Shebang 符号(#!)
- Java基础——多线程(待续)
- 怎么找一家培训机构来教你3D打印机怎么使用
- jQuery中live绑定的事件与解除绑定
- browser 存储
- xtrabackup原理
- 2016哈工大计算机推免保研工作细则
- Lufylenged引擎学习——LSprite
- 推荐系统中所使用的混合技术介绍