问题1)这条线被称为shebang,没有正常的形式普遍运作。例如
#!python
#!/usr/bin/python
#!/usr/local/bin/python
#!/usr/bin/python -t
都是有效/可接受的形式,但可能不适用于所有系统:
#!python只有在python可执行文件在你的shell的PATH中的某个地方才有效
#!/ usr / bin / python只有在python二进制文件实际上在/ usr / bin中才有效
#!/usr/local/bin / python也只有在python在/usr/local/bin中的时候才有效
问题#2)
#!/ usr / bin / python -tt将-tt选项传递给python,就好像你做的一样:
$ python -t somescript.py
在shell提示符下。您可以在shebang行上将任意的命令行参数传递给解释器。
问题3)
该行由OS内核和您当前使用的shell解释。 #之后的东西!简单地告诉操作系统应该启动哪个程序来“执行”脚本的其余部分。
问题4)
脚本语法取决于您使用的语言。例如。一个PHP shell脚本必须采取的形式
#!/usr/bin/php
<?php
... php code here ...
一个#!/ usr / bin / perl perl脚本必须使用Perl语法等…如果你把PHP代码与一个Perl shebang,你只需要Perl barf的脚本与语法错误,因为PHP代码不是perl码
问题#5)
Shebangs适用于Unix系统,其中文件扩展名从未真正用于识别操作系统的文件类型。一个.c文件被理解为一个C语言的源代码文件,但这只是一个惯例。您可以将一个Bash shell脚本放入.c文件,使其可执行,并使用#!/ bin / bash shebang,它将作为Bash脚本执行。
通过文件扩展确定可执行类型更多的是Windows的事情。
问题#6)
这可以追溯到问题#1的东西 – 如果shebang声称解释器处于某个OTHER路径,那么该特定脚本在shebang被修复或解释器被移动之前就无法执行。 Shebangs非常方便,但不是绝对的。
幸运的是,大多数口译员现在安装在相当标准的位置,所以找到(例如)Perl安装在/ some / wonky / weird / path而不是/ usr / bin有点不寻常