了解shebang

经常会看到Shell文件首行有个#!/bin/sh. 有时没有私护也能运行,不清楚是干嘛的。直到最近在编写Alfred Workflow时才了解到这个叫做Shebang。这里就mark下。

https://static.1991421.cn/2024/2024-04-02-235754.jpeg

Shebang

  1. Shebang即#!,如果存在的话一定是该文件第一行的前两个字符。
  2. 在文件中存在Shebang的情况下,类Unix操作系统程序加载器会分析Shebang后的内容,将这些内容作为解释器指令,并调用该指令,并将载有Shebang的文件路径作为该解释器的参数。
  3. 文件可以没有Shebang首行,但文件将不能直接被执行,但如果调用文件执行时直接使用解释器则可以运行。

例子

  • #!/bin/sh—使用sh,即Bourne shell或其它兼容shell执行脚本
  • #!/bin/csh—使用csh,即C shell执行
  • #!/usr/bin/env node—使用node,即nodejs执行,这里使用env的话,可以避免使用node绝对路径。

node例子

1
2
3
4
5
6
7
#!/usr/bin/env node
console.log(
JSON.stringify({
response: process.env.ruleContent,
footer: process.env.ruleName
})
);

如上在终端下可以直接执行,如果删除首行,直接执行将报错,除非node xxx执行即可。

相关文档