哈喽大家好,我是咸鱼
不知道小伙伴们在写 Bash 脚本或者说看别人的 Bash 脚本的时候有没有注意过脚本的第一行
(资料图片)
#!/bin/bash
Bash 脚本的第一行往往以 #!
开头,这一行称作 shebang 行
在 类 UNIX 系统中,shebang 行用来指定脚本的解释器路径,通常出现在第一行,格式如下
#! interpreter_path
shebang 行中开头 #!
字符的作用是告诉操作系统这不是一个普通二进制文件,而是需要通过解释器运行的东西
而这个解释器则通过 #!
字符后面来指定。例如 /bin/bash
表示使用 bash 解释器来执行该脚本文件
下面则是一些 Bash 脚本的 shebang 行,指定了不同的解释器
#! /usr/bin/perl#! /usr/bin/awk#! /usr/bin/python
那么这时候小伙伴们可能就会有疑问:我忘了加 shebang 行,脚本为什么还能执行?
如果一个脚本没有添加 shebang 行来指定解释器路径,则默认情况下系统会使用默认的 shell 来执行脚本,系统默认的 shell 可以通过下面的命令来查看
# 一般情况下默认的 shell 为bashecho $SHELL
现在我们知道了 shebang 行的作用,那么我们现在来编写一个脚本并修改 shebang 行试试
test.sh 内容如下:
#!/bin/bashecho Hello
先给 test.sh 脚本添加一下执行权限
chmod +x test.sh
接下来我们用几种方式来执行这个脚本可以看到脚本都成功执行了
下面我们来改一下 shebang 行,将其改成其他命令
#!/usr/bin/ls -lecho Hello
然后我们分别用几种方式来执行这个脚本上面脚本执行的结果是不是看的一脸懵逼,说实话我一开始看到的时候也是很懵
我们先来看下这四种脚本执行方式的区别
bash tesh.sh这种方式执行脚本的原理是将 test.sh 作为参数传给 bash 解释器(命令)来执行,而不是 test,sh 自己来执行
这种方式执行脚本不需要给脚本文件添加执行权限、不需要写 shebang 行指定解释器路径,因为脚本是作为参数被传给 bash 来执行
sh test.sh这种执行脚本的方式跟上面的方式原理一样,都是将脚本作为参数传进去,只不过是这个方式用的是 sh 解释器(命令),而不是 bash
/root/test.sh这种是通过绝对路径去执行脚本,通过绝对路径来执行脚本就需要脚本拥有执行权限
当使用绝对路径来执行脚本时,操作系统需要知道该脚本文件所使用的解释器类型,这就需要依靠脚本文件中的 shebang 行
实际上你用绝对路径执行脚本的时候,如果里面定义了 shebang 行(例如 #! /bin/bash
)
那么实际上跟下面的命令是一样的
/bin/bash /root/test.sh
在执行脚本的时候,操作系统会读取脚本的 shebang 行
如果你的 shebang 行是其他 Linux 命令而不是解释器,那么就会导致操作系统将你的 shebang 行当作命令,而你的脚本则是命令的参数
就好比上面的例子,我将 shebang 行改成了 #! /usr/bin/ls -l
,当我执行脚本的时候其实就是下面这样的
/usr/bin/ls -l /root/test.sh
这样会导致脚本无法执行
./test.sh这种是通过相对路径去执行脚本,跟上面用绝对路径执行脚本方式是一样的,只不过区别是一个是相对路径一个是绝对路径
总结:shebang 行通常出现在 UNIX 系统的脚本当中,用来指定脚本的解释器路径,出现在第一行,以#!
开头如果脚本里面没有定义 shebang 行,系统会去找默认的解释器,默认解释器用 echo $SHELL
查看用 bash 或者 sh 命令执行脚本的时候,其实是把脚本作为参数传给 bash 或 sh 命令了,这时候脚本可以不添加执行权限、可以不需要 shebang 行如果用绝对路径或者相对路径的方式来执行脚本,需要脚本拥有执行权限,如果 shebang 行定义的不是解释器而是其他命令,就会导致脚本无法执行附上参考链接:Shebang Shenanigans :: Linus Karlsson
标签:
精彩推荐
金融界12月30日消息据交通运输部,30日,交通运输新业态协同监管部际联席会议办公室对滴滴出行、T3出行...
12月29日,沪指报收3073 7,较前一交易日下跌0 44%。特斯拉板块整体表现一般,较前一交易日下跌0 27%...
昨天大盘最后一小时放量上涨,外围股市普遍上涨,消息面偏向平静。今天大盘应该高开,上攻时关注3086点...
作文给同学的礼物第一篇有一次,我参加了“阅读交流”会,当小老师。ppt已经做完了,就差给同学们分的小...
格隆汇12月29日丨科伦药业公布,四川科伦博泰生物医药股份有限公司(简称“科伦博泰”)是公司的控股子公...
格隆汇12月29日丨紫元元公告,于2022年12月29日,卖方叶特与买方深圳市美佳尔健康管理有限公司(公司间接...
开尔新材(300234)12月29日在投资者关系平台上答复了投资者关心的问题。投资者:董秘您好,公司卖掉旧厂...
网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天...
东吴证券国际经纪有限公司陈睿彬近期对比亚迪进行研究并发布了研究报告《2022年三季报点评:业绩符合市...
中新社北京12月28日电(记者阮煜琳)中国生态环境部近日发布了《企业温室气体排放核算与报告指南发电设施...
作为一个设计行业的社畜,除了发际线往后走,还有那稀疏几乎不见头发的三角区域…一直是我的痛!要想富...
《证券日报》记者经过梳理发现,2022年商业银行二级资本债发行的井喷,与发债银行数量大幅增加有着直接关系
海口第二批发热就医服务站海口市于12月25日开设了8个“一站式”发热就医服务站,有效缓解了医疗机构的接...
1、车辆行驶证原件或复印件;2、车辆驾驶人驾驶证原件;3、车辆驾驶人身份证原件;4、现金和银行卡。交通事...
合肥邮政储蓄银行2023贺岁纪念币预约时间+兑换时间:(一)预约期:2022年12月27日22:30-12月29日24:00...
珠海横琴新区抗原检测试剂零售药店区域供应商连锁门店名称地址联系电话横琴新区大参林医药集团股份有限...
同花顺数据中心显示,国安达12月26日获融资买入81 71万元,占当日买入金额的7 22%,当前融资余额1 33...
中证网讯(记者武卫红)12月26日晚,海航控股披露定增结果公告,海航控股股东方大集团通过瀚巍投资向上...
编号:DSH-06-77 时代出版会议文件 日期:2022...
2023年的春晚将会在一个多月后开始,可是节目组已经基本确认了节目表演的节目和名单。
资讯News
05-07
05-07
05-07
05-07
05-07
05-07
05-07
05-07
05-07
05-07
05-07
05-07
05-07
05-07
05-07
05-07
05-07
05-07
05-07
05-07
聚焦Policy
当好农民工的“护薪人” 近日,罗某等7名农民工在收到被拖欠的工资后,纷纷打电话向江西省南昌市...
“通讯录里所有人都知道我欠钱了” □ 本报记者 韩丹东 □ 本报见习记者 张守坤 ...
大连宝马车撞人案肇事司机被判死刑 本报讯 记者韩宇 10月29日,辽宁省大连市中级人民法院一审...
医院财务迷上网络赌博输光5000万元公款 □ 本报记者 马维博 □ 本报通讯员 汪宇堂 曹...
辊环车削 雕琢毫厘(工匠绝活) 【绝活看点】 23年来,雷虎始终扎根一线,改进钢材轧制工艺...
交警严查超标电动自行车挪用“白牌” 截至昨晚6时,处罚电动自行车违法行为共计6585笔;下一步将...
明起寒潮来袭 北方气温普降10℃以上 中央气象台预计,本周日北京平原地区最低气温降至-4℃左右...
多种蔬菜价格降幅达五成 包括菠菜、蒿子秆等 预计本月中旬蔬菜恢复供需平衡 本报讯(记者...
北京周日最低气温或达-4℃ 本报讯(记者 赵婷婷)北京青年报记者昨天从中央气象台获悉,新一股...
昌平一家四口确诊新冠肺炎 天通北苑第二社区升级为中风险地区 朝阳两涉疫校区及16所学校停课 ...
图集Picture