#/bin/python是运行什么命令的?

WBOY
WBOYオリジナル
2016-06-06 16:23:551379ブラウズ

#/bin/python是运行什么命令的?求大牛详解。。。
初学Python,练习的时候遇到这个,被鄙视,呜呜~~~~~~~~~~~~~~恨没姿势,求涨~~

回复内容:

首先,楼主,你打漏了一个字符,正确的是

#!/bin/python

要了解这行是干啥用的,得先了解一个“魔数(magic number)”的概念。

每一种文件,在文件开头,都有一个标识文件类型的字节序列,标识这个文件是什么类型的。这个字节序列叫““魔数”。

像unix下的脚本,这个魔数就是"#!"。这个魔数的英文名叫“Shebang”。


操作系统的文件解释器在加载文件时,先要判断文件是什么类型的,然后再加载特定的文件解释器,来解读这个文件。操作系统的文件解释器判断的依据,就是看这个魔数。

所以,当看到"#!"时,操作系统的文件解释器知道这是一个“脚本”。

那具体用哪一种脚本解释器呢?它继续读。

结果发现/bin/python。

也就是要用/bin/python 这个路径下的一个叫“python”的解释器来解释这个文件。

于是操作系统的文件解释器就加载了这个python解释器。 然后操作系统的文件解释器任务就完成了。

当python解释器被加载运行后,它自己来解释这个文件。

这时,它看到第一行: #!/bin/python

它认得一开头的#是标记注释行开始的记号,所以它认为这是一行注释,就直接跳过。
然后开始执行后续的真正的python指令。

综上,这一行,被两个层次的解释器以不同的形式解释。 这就是一行注释!
在#后面加上!才是解释器定义。 这是你在linux/unix系统下运行一个脚本的时候,告诉系统用什么解释器来运行脚本用的
比如你执行一个脚本
<code class="language-text">$ ./script
</code>
#!/bin/python 不是命令,是定义Python解释器位置的。就是告诉系统在什么地方可以找到用于这个脚本的Python解释器。
比如,#!/bin/python3 是定义Python3位置的。
我一般这么写,#!/use/bin/env python
这样可以让系统协助寻找Python解释器,可以在多个系统里面通用。 你用的什么教材?换一本吧,没解释这句的书就不用看了 提醒 UNIX系统 用 /bin/python 来解释执行这个脚本


<code class="language-text">head -1 abc.sh
#! /bin/bash 
</code>
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。