https://linux.cn/article-3664-1.html

本文了将给你简单介绍一下Shebang(”#!”)这个符号。

首先,这个符号(#!)的名称,叫做”Shebang”或者”Sha-bang”。

词源与历史

Shebang的名字来自于SHArp和bang,或haSH bang的缩写,指代Shebang中#!两个符号的典型Unix名称。 Unix术语中,井号通常称为sharphashmesh;而叹号则常常称为bang。也有看法认为,shebang名字中的sh来自于默认shell Bourne shell的名称,sh,因为常常使用shebang调用之。

用途

Shebang这个符号通常在Unix系统的脚本中第一行开头中写到,它指明了执行这个脚本文件的解释程序。

1. 如果脚本文件中没有#!这一行,那么它执行时会默认用当前Shell去解释这个脚本(即:$SHELL环境变量)。Mac OS 下$SHELL = /bin/sh Linux下 $SHELL = /bin/bash

2. 如果#!之后的解释程序是一个可执行文件,那么执行这个脚本时,它就会把文件名及其参数一起作为参数传给那个解释程序去执行。

3. 如果#!指定的解释程序没有可执行权限,则会报错“bad interpreter: Permission denied”。如果#!指定的解释程序不是一个可执行文件,那么指定的解释程序会被忽略,转而交给当前的SHELL去执行这个脚本。

4. 如果#!指定的解释程序不存在,那么会报错“bad interpreter: No such file or directory”。注意:#!之后的解释程序,需要写其绝对路径(如:#!/bin/bash),它是不会自动到$PATH中寻找解释器的。

5. 当然,如果你使用”bash test.sh”这样的命令来执行脚本,那么#!这一行将会被忽略掉,解释器当然是用命令行中显式指定的bash。

6. 如果脚本中还包含有 其他的#!行, 那么bash将会把它看成是一个一般的注释行.

例如我们写一个python程序,可以在文件头写上python解释器的位置 可以用which python查看具体位置,解释which python结果为

/usr/bin/python

那么我们可以在文件头这么写 #! /usr/bin/python

这样在给文件chmod u+x 之后就可以./ 执行

但如果使用python +文件名 实际上是不需要#!的

另外#! /usr/bin/python这么写,如果我换了一个机器,它的python装在其他地方怎么办?

可以这么写#!/usr/bin/env python

(转)Linux上的Shebang符号(#!)的更多相关文章

  1. 00001 - Linux 上的 Shebang 符号(#!)

    使用Linux或者unix系统的同学可能都对#!这个符号并不陌生,但是你真的了解它吗? 本文了将给你简单介绍一下Shebang(”#!”)这个符号. 首先,这个符号(#!)的名称,叫做”Shebang ...

  2. 释伴:Linux 上的 Shebang 符号(#!)

    使用Linux或者unix系统的同学可能都对#!这个符号并不陌生,但是你真的了解它吗? 本文了将给你简单介绍一下Shebang(”#!”)这个符号. 首先,这个符号(#!)的名称,叫做”Shebang ...

  3. Linux上的Shebang符号(#!)

    使用Linux或者unix系统的同学可能都对#!这个符号并不陌生,但是你真的了解它吗? 本文了将给你简单介绍一下Shebang("#!")这个符号. 首先,这个符号(#!)的名称, ...

  4. 在 Linux 上配置一个 syslog 服务器

    syslog服务器可以用作一个网络中的日志监控中心,所有能够通过网络来发送日志的设施(包含了Linux或Windows服务器,路由器,交换机以及其他主机)都可以把日志发送给它. 通过设置一个syslo ...

  5. linux下的shell命令的编写,以及java怎样调用linux的shell命令(java怎样获取linux上的网卡的ip信息)

    程序猿都非常懒,你懂的! 近期在开发中,须要用到server的ip和mac信息.可是server是架设在linux系统上的,对于多网口,在获取ip时就产生了非常大的问题.以下是在windows系统上, ...

  6. Linux 上的数据可视化工具

    Linux 上的数据可视化工具 5 种开放源码图形化工具简介 Linux® 上用来实现数据的图形可视化的应用程序有很多,从简单的 2-D 绘图到 3-D 制图,再到科学图形编程和图形模拟.幸运的是,这 ...

  7. linux上redis安装配置及其防漏洞配置及其攻击方法

    Linux上redis安装: 需先在服务器上安装yum(虚拟机可使用挂载的方式安装) 安装配置所需要的环境运行指令:  yum -y install gcc 进入解压文件执行make 指令进行编译 执 ...

  8. Linux上部署SVN

    Linux上部署SVN author:headsen chen  2017-10-16  16:45:04 前提:通过yum来安装,必须是centos6.5的桌面版的.否则会出现某些的安装包不全而导致 ...

  9. [转帖]Linux命令中特殊符号

    Linux命令中特殊符号 转自:http://blog.chinaunix.net/uid-16946891-id-5088144.html   在shell中常用的特殊符号罗列如下:# ; ;; . ...

随机推荐

  1. [错误]试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)

    错误原因: dll文件是在64位机下编译的,而服务器是32位机,所以无法调用 或者dll文件是在64位开发环境下下编译的,而现在的调用程序是的32位,所以无法调用 注意项目属性:

  2. thinpad E43系列WIN8装WIN7系统

    昨晚WIN8系统下装WIN7 折腾了好久,故此总结一下写一篇U盘装WIN7 : 先简述一下思路:BOSS设置启动项------->U盘启动--------> 进入PE删除所有分区----- ...

  3. Windows 进程通信 之 DDE技术

    DDE (Dynamic Data Exchange,DDE)动态数据交换,是一种进程间通信机制,它最早是随着Windows由微软提出的.当前大部分软件仍旧支持DDE,但最近十年里微软已经停止发展DD ...

  4. SDUT图结构练习——最小生成树

    http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2144&cid=1186 这道题一开始是用prim算法做的,一直错一直错,后来问了帅郭改用 ...

  5. hdu 2177 取(2堆)石子游戏 博弈论

    由于要输出方案,变得复杂了.数据不是很大,首先打表,所有whthoff 的奇异局势. 然后直接判断是否为必胜局面. 如果必胜,首先判断能否直接同时相减得到.这里不需要遍历或者二分查找.由于两者同时减去 ...

  6. 李洪强iOS开发支付集成之微信支付

    iOS开发支付集成之微信支付 微信支付也是需要签名的,也跟支付宝一样,可以在客户端签名,也可以在后台签名(当然,为了安全还是推荐在服务器上做签名,逻辑也比较好理解). 1 - 集成前首先要看看文档 开 ...

  7. flexbox弹性盒子布局

    混合划分 demo1,css: #demo1{ width: 100%; background: #ccc; display: -webkit-flex;/*表示使用弹性布局*/ } #demo1 . ...

  8. MVC下基于DotNetOpenAuth 实现SSO单点登录

    具体官网可以查看:http://dotnetopenauth.net/,托管地址:https://github.com/DotNetOpenAuth/DotNetOpenAuth 可能需要FQ 博客园 ...

  9. 2014-9-17二班----11 web project

    http://localhost:8080/rwkj1/indexServlet?name=zhagnsan&pwd=1234 跳  转  http://localhost:8080/rwkj ...

  10. CAD导入ArcScene中线被打断 求解决方案

    cad中是这样 但在arcscene里中是这样