释伴:Linux 上的 Shebang 符号(#!)
创始人
2024-03-01 13:23:06
0

使用 Linux 或者 unix 系统的同学可能都对 #! 这个符号并不陌生,但是你真的了解它吗?

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

这个符号(#!)的名称,叫做“Shebang”或者“Sha-bang”。长期以来,shebang 都没有正式的中文名称。Linux 中国翻译组的 GOLinux 将其翻译为:释伴,即解释伴随行的简称,同时又是 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 **”

收信人:<[redacted]@talisman.org>

日期:Thu, 19 Nov 2009 18:37:37 -0600

主题:RE: What do -you- call your #! 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。

相关内容

不使用Shebang的替代...
Shebang是在Unix和Linux系统中用于指定脚本解释器的特...
2024-12-29 08:30:17
Bash脚本的sheban...
Bash脚本的shebang指的是在脚本文件的第一行指定解释器,以...
2024-11-26 02:01:31
AWK脚本shebang以...
要在AWK脚本中使用破折号前缀的参数,你需要在脚本的shebang...
2024-11-13 14:32:32
安装Anaconda Py...
安装Anaconda Python后,shebang是指在脚本文件...
2024-11-09 06:01:44
极客漫画:#!S
这是我第一次遇到无法翻译的漫画。#! 是 Unix/Linux 里...
2024-03-01 21:25:01
释伴:Linux 上的 S...
使用 Linux 或者 unix 系统的同学可能都对 #! 这个符...
2024-03-01 13:23:06

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
2024 开年,LLUG 和你... Hi,Linuxer,2024 新年伊始,不知道你是否已经准备好迎接新的一年~ 2024 年,Lin...
什么是 KDE Connect... 什么是 KDE Connect?它的主要特性是什么?它应该如何安装?本文提供了基本的使用指南。科技日...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...