云网牛站
所在位置:首页 > Linux编程 > #!(Bash Shebang)详细解释和使用方法

#!(Bash Shebang)详细解释和使用方法

2019-07-24 16:07:56作者:员节稿源:云网牛站

如果你通过阅读其他人的代码来学习Bash脚本,你可能已经注意到脚本中的第一行以#!开头字符和Bash解释器的路径,这个字符序列(#!)称为shebang,用于指示操作系统使用哪个解释器来解析文件的其余部分,本文为你带来#!(Bash Shebang)详细解释和使用方法。

#!(Bash Shebang)详细解释和使用方法

 

Shebang Interpreter指令

Shebang解释器指令采用以下形式:

#!interpreter [arguments]

注:

该指令必须是脚本中的第一行。

该指令必须从shebang #!开始。

shebang字符后的空格是可选的。

Interpreter是二进制文件的完整路径(例如:/bin/sh,/bin/bash)。

解释器参数是可选的。

例子:

#!/bin/bash-使用bash来解析文件。

#!/usr/bin/env perl-使用env命令查找perl可执行文件的路径。

#!/usr/bin/python-使用python二进制文件执行文件。

 

在Bash脚本中使用Shebang

如果未指定shebang且运行Bash脚本的用户正在使用另一个Shell,则该Shell将使用该Shell使用的任何默认解释器来解析该脚本,例如,bash的默认解释器是bash,而zsh的默认解释器是sh(参考:在Linux系统上安装和配置Zsh的方法),为了确保你的脚本始终使用Bash进行解释,你需要使用shebang指定可执行路径。

有两种方法可以使用Shebang指令并设置解释器。

1、使用bash二进制文件的绝对路径:

#!/bin/bash

2、使用env实用程序:

#!/usr/bin/env bash

使用第二种方法的优点是它将在用户的$PATH环境变量中搜索bash可执行文件,如果有多个bash路径,则脚本将使用第一个路径。

使用第一个选项向Bash shell供应添加选项时,将其传递给解释器,例如,要以调试模式运行脚本,你可以使用#!/bin/bash -x,如果你使用的是env方法,那么你需要使用set来声明该选项,要启用调试模式,你可以在shebang行之后添加set -x。

 

示例脚本

让我们使用shebang创建一个简单的脚本,打印出“Hello, World”,打开文本编辑器并粘贴以下行:

$ nano hello_world

内容:

#!/bin/bash

echo "Hello, World"

为了能够在不从命令行指定解释器的情况下运行脚本,你需要使文件可执行:

$ chmod +x hello_world

现在,如果你可以通过键入./后跟脚本名称来运行脚本:

$ ./hello_world

Hello, World

 

覆盖Shebang行中的解释器集

如果由于某种原因想要覆盖Shebang行中的解释器集,则需要通过显式指定所需的shell来运行脚本。

例如,要使用bash shell运行在Shebang行中指定#!/bin/sh的脚本,你可以输入:

$ bash hello_world

请注意,覆盖shell解释器不是一个好主意,因为它可能会导致脚本的意外行为。

 

结论

经过以上讲解,你应该很好地理解什么是Shebang,以及如何在Bash脚本中使用它。

 

相关主题

《Shell脚本学习-Linux命令行》书籍 一共三十七章在线阅读

精选文章
热门文章