#!的解析

Posted simmy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#!的解析相关的知识,希望对你有一定的参考价值。

用Linux写脚本多年,一直未留意这个#!(读作 shabang或shebang),最近看书有提到这个,因此记录之。

#和!都来自于Unix术语,# 发音为sharp, hash或mesh, ! 发音为bang, 因此 #! 连在一起写作 shabang或者shebang(最常用)


符号#! 的作用是指明执行脚本文件的解释程序,在Shebang后面的解释程序如果是一个可执行文件,则当执行脚本时,Shebang会把文件名作为参数传递给解释程序去执行。

如python3.10写的 test.py中的python3.10是解释程序,test.py是文件名,命令行界面运行时需要输入:

python3 test.py

使用#!后,则可省略前面的python3,直接输入./test.py 即可运行Python脚本


一些注意事项:

#!指定的解释程序必须为可执行文件(即 chmod+x ​​test.py​​),否则系统会报错:Permission denied

如果#! 指定的解释程序不存在,系统会报错:No such file or directory

如果没有#! 系统会默认使用当前shell去解释这个脚本


写法:

#!之后的解释程序必须写绝对路径,因为它不会自动到$PATH中寻找运行环境,例子如下:

#!/bin/bash

#!/bin/perl

#!/bin/python

#!/usr/bin/env python3

#!/usr/bin/env python2

以上是关于#!的解析的主要内容,如果未能解决你的问题,请参考以下文章

用Google的gflags优雅的解析命令行参数

TCP 疑难杂症解析(2023年更新)

轻巧灵动的架构设计,在她手中一一解析

#!的解析

全面解析js中的for循环

时间字符串以及时间戳解析