Shell脚本中的shebang
一般的Unix系统中都会出现#!这种符号,但这种符号叫什么,是什么一个原理呢?
#!符号可以叫做shebang
,很早之前,shebang一直都没有正式的中文名称,后来Linux中国翻译组的GOLinux将其翻译为释伴,即"解释伴随行"的简称,同时又是shebang的音译
shebang通常出现在Unix系统的脚本中的第一行,作为前两个字符,在shebang之后,可以有一个或者多个空白字符,后接解释器的绝对路径,用于指明执行这个脚本的解释器.在直接调用脚本的时候,系统的程序载入器会分析shebang后面的内容,将这些内容作为解释器指令,并调用该指令,将载有shebang的文件路径作为该解释器的参数,执行脚本,从而使脚本文件的调用方式与普通的可执行文件类似.例如,以指令#!/bin/bash开头的文件,在执行时会实际调用/bin/bash程序来执行
由于#符号在许多脚本语言中都是注释标识符,shebang的内容会被这些脚本解释器自动忽略.在字符不是注释标识符的语言中,例如scheme,解释器也能忽略以#!开头的首行内容,这样就保证了shebang的很好的兼容性
shebang的一些具体用法列举如下
- 如果脚本文件中没有#!这一行,那么执行shell脚本的时候,就会默认使用当前的shell去解释这个脚本(即:$SHELL环境变量)
- 如果#!之后的解释程序是一个可执行文件,那么执行这个脚本时,他就会把文件名以及参数一起作为参数传递给那个解释程序去执行
- 如果#!指定的解释程序没有可执行权限,就会报错,提示权限被拒绝
- 如果#!指定的解释程序不是一个可执行文件,那么指定的解释程序会被忽略,转交给当前shell去执行这个脚本
- 如果#!指定的解释程序不存在,就会报错找不到那个目录或文件
- #!之后的解释器路径必须要用绝对路径,它不会自动去$PATH环境变量中寻找解释器
- 如果在命令行执行脚本的时候,执行采用某一个解释器去执行,比如bash test.sh这样的命令,那么脚本中的#!一行将被自动忽略
- 脚本文件必须要有可执行权限,脚本才会被执行
shebang的好处在于,允许脚本和数据文件充当系统命令,无需在调用的时候由用户指定解释器,从而对用户或者其他程序隐藏了其执行的细节.比如:
- #!/bin/sh 使用sh,即Bourne shell或其他兼容shell执行脚本
- #!/bin/csh 使用csh,即C shell执行
- #!/usr/bin/perl -w 使用带警告的perl执行
- #!/usr/bin/python -0 使用具有代码优化的python执行
- #!/usr/bin/php 使用php的命令行解释器执行
shebang行也可以包含需要传递到解释器的特定选项,比如上面的perl和python的例子
Shell脚本中的shebang相关推荐
- shell脚本中执行命令_如何在Shell脚本中执行命令?
shell脚本中执行命令 Shell is a command-line interpreter that allows the user to interact with the system. I ...
- linux 脚本 alias,在shell脚本中使用alias别名
本文最后更新于2015年7月12日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢! 缘由: 经常用Linux进行操作的同学一般都会有各种各样的技巧来提升工作效率,而添加/改写shell ...
- shell脚本中的特殊变量与if条件测试
1.特殊变量 实际工作中我们不可避免的遇到一些xxxx.sh脚本文件,实际阅读shell脚本代码时经常会遇到很多特殊变量(例如:$0.$n.$#.$@.$*.$?.$$等),我们常常会被这些特殊符号折 ...
- shell脚本中的变量
shell脚本中的变量 1 变量的定义 2 shell脚本中变量的定义方法 2.1 环境级别 2.2 用户级别 2.3 系统级别 3 变量名称 4 变量的转译 4.1 转译 4.2 声明 4.3 变量 ...
- 数组-在Shell脚本中的基本使用介绍
2019独角兽企业重金招聘Python工程师标准>>> Shell脚本在运维工作中是极其重要的,而数组在shell脚本里的运用无论是在循环或运算方面都是非常实用的一个环节. 下面是对 ...
- 详解Linux交互式shell脚本中创建对话框实例教程
详解Linux交互式shell脚本中创建对话框实例教程 本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一 ...
- Shell脚本中的并发
主要记录一下Shell脚本中的命令的并发和串行执行. 默认的情况下,Shell脚本中的命令是串行执行的,必须等到前一条命令执行完后才执行接下来的命令,但是如果我有一大批的的命令需要执行,而且互相又没有 ...
- 7月11日任务 shell介绍、shell结构和执行 、date命令用法、shell脚本中的变量
2019独角兽企业重金招聘Python工程师标准>>> 20.1 Shell脚本介绍 • shell是一种脚本语言 aming_linux blog.lishiming.net ...
- 如何在 Shell 脚本中执行语法检查调试模式
我们开启了 Shell 脚本调试系列文章,先是解释了不同的调试选项,下面介绍如何启用shell调试模式. 写完脚本后,建议在运行脚本之前先检查脚本中的语法,而不是查看它们的输出以确认它们是否正常工作. ...
最新文章
- Html编辑器kindsoft
- 关于DataAccess Application block
- 以Python为例对变量类型及运算符进行举例
- 高速建成Android开发环境ADT-Bundle和Hello World
- 敏捷开发团队管理系列之二:程序与测试团队I
- [Web开发] 如何改变IE滚动条的颜色
- 不懂技术的小白,使用电商网站建设工具有什么注意事项?
- zheng项目系统简单的分析记录
- 第二天 熟悉ue4工具 及快捷键
- 网易邮箱客户端服务器设置
- 开涛 SpringMVC
- 都2021年了不会还有人用门禁卡吧!(手把手教你用手机代替门禁卡)
- php socket 介绍
- linux系统端口的5种状态及含义
- Life feelings--11--护眼贴士-如何让心灵的窗口锃光发亮?-程序员工程师生活必备
- 仿QQ聊天软件(JavaFX+云端数据库)
- docker-compose 安装多版本php
- 独角兽项目 4 - 失败的发布
- 应届毕业生如何快速找到Java开发工作?
- 适合Python初学者阅读的Github开源代码