Linux 脚本中的 Shebang #!
在 Linux 中,当我们准备运行一个可执行文件时,execve 程序会建立一个新的进程替代当前的进程(如终端下的 bash),同时决定如何完成这个执行任务。
当我们执行一个文本文件时,execve 需要文本文件的开头两个字符为 “#!
读作:shebang,同时跟随一个解释器的路径用来解释后续的脚本文本内容。
下面我们举例说明。
shell 脚本
最常用的就是在 shell 脚本中使用 shebang,下面是一个简单的示例:
#!/bin/sh
echo "Hello, ${USER}"
我们定义了此脚本的解释器为 /bin/sh
,后续的脚本内容会通过此解释器来运行。
实际上 /bin/sh
是当前系统可执行 shell 命令的程序的软链接,大多数情况下它表示 bash,但为了不同系统的兼容性和安全性,我们直接使用此软链接来表示当前系统支持的 shell 可执行程序。
同时需要注意的是,可执行文本文件必须有执行权限,当创建一个新的脚本文件时,需要对其设置执行权限:
chmod +x test.sh
其他解释器
当然我们可以根据需要定义其他的解释器,而不仅仅是 sh。下面的示例我们将 cat 作为解释器,这样就会输出脚本本身的内容:
#!/bin/cat
Hello World!
调用 PATH
上面的示例中,我们定义的解释器的绝对路径,但是当我们不知道一个程序的明确的路径时,我们可以通过将解释器定义为 env 程序,并传递实际需要的解释器程序名称,env 会自动在当前用户 PATH 环境变量中查询程序的路径并作为解释器执行脚本。
下面我们通过 env 来查询 node 并作为解释器执行 node 脚本:
#!/usr/bin/env node
console.log('Hello world!');
以上就是对 shebang 的简单解释。
参考链接
Using Shebang #! in Linux Scripts
标签:无