在脚本中,您必须在第一行包含 #!,然后是将执行脚本的程序的路径(例如:sh、perl)。

据我所知, # 字符表示注释的开始,执行脚本的程序应该忽略该行。看起来,第一行在某个时候被某些东西读取,以便脚本由正确的程序执行。

有人可以更多地了解 #! 的工作原理吗?

我真的对此很好奇,所以答案越深入越好。

最佳答案

推荐阅读:

  • The UNIX FAQ: Why do some scripts start with #! ... ?
  • The #! magic, details about the shebang/hash-bang mechanism on various Unix flavours
  • Wikipedia: Shebang

  • unix 内核的程序加载器负责执行此操作。当调用 exec() 时,它要求内核从文件中的参数加载程序。然后它将检查文件的前 16 位以查看它具有什么可执行格式。如果它发现这些位是 #!,它将使用文件第一行的其余部分来查找它应该启动的程序,并提供它试图启动的文件的名称(脚本)作为最后一个参数解释器程序。

    然后解释器正常运行,并将 #! 视为注释行。

    关于shell - #! Shebang工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3009192/

    10-15 01:14