示例一
#!/bin/sh
# purpose: print out current directory name and contents
pwd
ls
示例二
# purpose: print out current directory name and contents
#!/bin/sh
pwd
ls
有什么区别 - 如果我将第一行作为评论(#
),将#!/bin/sh
作为第二行,会发生什么?
#!/bin/sh
的含义是什么?
答案 0 :(得分:2)
通常,shell脚本由/ etc / passwd文件中定义的默认shell运行。但是您可以明确定义一个可以运行脚本的程序。
Unices使用通用方法来确定运行特定脚本所需的程序(man execve(2))。如果脚本具有正确的执行权限集并且在脚本中第一行以#!
个字符开头,则它将由之后定义的程序运行。
例如,如果第一行是#!/usr/bin/awk -f
,则文件的其余部分将传递给awk
程序(因此必须使用awk
语法)。或者,如果Makefile以#!/usr/bin/make -f
开头,则文件的其余部分将传递给make
。您可以将脚本作为普通程序启动,脚本可以用awk
或make
(或任何已定义的)语法编写。
如果execve
找不到#!
作为文件的前两个字符,它将被视为普通脚本文件,它将按原样运行。
因此使用#!
您可以确定脚本语言,并且您不需要知道其他用户使用您的脚本使用的shell。在任何其他行中,#!
将被解释为您的默认shell,通常只是注释行。
答案 1 :(得分:2)
1st&的区别是什么?第二个shell脚本..?
输出没有区别。但是,当解释器逐一读取行时,执行这两者的时间会有所不同。
如果我在第二行#!/ bin / sh后的第一行发表评论(#)那么会发生什么?
除了shebang(#!)以#()开头的任何行都被视为shell脚本中的注释。
#!/ bin / sh的含义是什么?
它是在shebang(#!)之后使用的解释器的路径(这里是 - / bin / sh)。 Shell将尝试使用shebang之后提到的解释器语言来执行脚本。