评论#!/ bin/sh行之前和/或之后的注释(#)行的效果

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

Tru*_*ueY 5

通常,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,通常只是注释行。