第一行脚本

第一行脚本

第一行的 #!/bin/bash 是什么意思?它是否只是一个注释,并且像程序中的所有其他注释一样被 shell 忽略

或者

解释器仅解释这一行,并且忽略从 # 开始的所有其他行(除了 #!/bin/bash 之外)。

答案1

第一行告诉计算机在执行文件时使用哪个解释器

假设你使用 python 编写一个脚本,在运行这个脚本时,你将使用 python 解释器,计算机如何知道要使用哪个解释器,它会通过这一行知道,也称为舍邦,对于蟒蛇

#!/usr/bin/env python
print "Hello world"

再次假设您在 bash 中编写了一个脚本,并使用 bash 脚本的 shebang 告诉计算机在执行此代码时使用 bash 解释器

 #!/usr/bin/bash 
  echo "Hello world" 

答案2

以 开头的第一行#!(在 Linux 上)由Linux内核里面的实施执行(2)系统调用(对于大多数命令,您的 shell 在 之后调用fork- 这些命令不是函数,也不是 shell 内置命令)。

您可以提及其他可执行文件的绝对路径(例如/usr/bin/env,请参阅环境(1))。作为一个愚蠢的示例,尝试制作一个包含唯一行的脚本#!/bin/cat /proc/self/maps,然后使该脚本可读且可执行(使用chmod a+rx),然后运行它。

POSIXexecve规格没有提到任何舍邦特定的处理,但是我工作过的所有类 Unix 系统(Linux、SunOS、HPUX、AIX...)确实在execve

解释bash器会跳过该行,就像以 , 开头的任何其他行一样#,作为注释。

另请参阅binfmt_misc(Linux 特定)。

答案3

强制脚本使用 bash shell 运行,而不是当前使用的 shell。

相关内容