Man*_*nta 6 shell comments shebang sh
例一
#!/bin/sh
# purpose: print out current directory name and contents
pwd
ls
Run Code Online (Sandbox Code Playgroud)
例二
# purpose: print out current directory name and contents
#!/bin/sh
pwd
ls
Run Code Online (Sandbox Code Playgroud)
有什么区别 - 如果我把第一行作为注释(#),#!/bin/sh作为第二行,将会发生什么?
是什么意思#!/bin/sh?
通常,shell 脚本由 /etc/passwd 文件中定义的默认 shell 运行。但是您可以显式定义一个可以运行脚本的程序。
Unices 使用通用方法来确定运行特定脚本所需的程序 (man execve(2) )。如果脚本设置了正确的执行权限,并且在脚本中第一行以字符开头#!,则它将由后面定义的程序运行。
例如,如果第一行是,#!/usr/bin/awk -f则文件的其余部分将传递给程序awk(因此必须使用awk语法)。或者,如果 Makefile 以 开头#!/usr/bin/make -f,则文件的其余部分将传递到make. 您可以将脚本作为普通程序启动,并且可以使用awkor make(或任何定义的)语法编写脚本。
如果execve没有找到#!文件的前两个字符,它将被视为普通脚本文件并按原样运行。
因此,使用#!您可以确定脚本语言,并且您不需要知道使用您的脚本的其他用户使用什么 shell。任何其他行都#!将被解释为您的默认 shell,通常只是注释行。