python - 在 linux 脚本中是什么意思? #!/usr/bin/python -tt

标签 python linux bash interpreter

我知道 .sh bash 脚本的开头是

#!/bin/bash

它指向命令解释器可执行文件。

但是在观看 Google Python Class http://www.youtube.com/watch?v=tKTZoB2Vjuk 期间我注意到他们使用 python

#!/usr/bin/python -tt

。在网上冲浪我也发现了这种表示法的风格:

#!/usr/local/bin/python

甚至

#!/usr/bin/env python

.

所以,我是 Python 新手,我是普通 Linux 用户,我对这个“神奇”行有几个问题:

  1. 首先,这条线的正确形式是什么?为什么?
  2. #!/usr/bin/python -tt 中的 -tt 键是什么意思?
  3. 什么程序在 Linux 中解析这一行?
  4. 对于任何脚本,该行的语法是什么?
  5. 如果每个文件都有扩展名,为什么这一行如此必要?
  6. 那么,在每个计算机解释器中,某种脚本将存储在不同的地方而不是另一个地方呢?并且脚本无法运行。

这对我来说真的很有趣。 这是什么线?为什么是这条线?这行怎么写?为什么会这样?...

最佳答案

问题 #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)

该行由操作系统内核和您当前使用的 shell 解释。 #! 之后的内容只是告诉操作系统应该启动哪个程序来“执行”脚本的其余部分。

问题 #4)

脚本语法取决于您使用的语言。例如。 PHP shell 脚本的格式必须为

#!/usr/bin/php
<?php
  ... php code here ...

#!/usr/bin/perl perl 脚本必须使用 Perl 语法等...有语法错误,因为 PHP 代码是 不是 perl 代码

问题 #5)

Shebangs 用于 Unix 系统,其中文件扩展名从未真正用于向操作系统识别文件类型。 .c 文件被理解为 C 语言源代码文件,但这只是一种约定。您可以将 Bash shell 脚本放入 .c 文件中,使其可执行,然后使用 #!/bin/bash shebang,它将作为 Bash 脚本执行。

通过文件扩展名确定可执行类型更像是 Windows 的事情。

问题 #6)

这可以追溯到问题 #1 - 如果 shebang 声称解释器位于其他路径而不是它所在的位置,则在修复 shebang 或移动解释器之前无法执行此特定脚本。 Shebangs 非常方便,但并非万无一失。

谢天谢地,现在大多数解释器都安装在相当标准的位置,因此在 /some/wonky/weird/path 而不是 找到(比如说)安装 Perl 有点不寻常>/usr/bin

关于python - 在 linux 脚本中是什么意思? #!/usr/bin/python -tt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9050331/

相关文章:

python - Web REPL架构

python - python中数组的矩阵乘法

bash - 使用 OpenSSL 生成质数

linux - SSH 与 WebDAV - 各自的安全漏洞是什么?

linux - 如何在刚刚加了时间戳的脚本中指定一个文件?

python - 保持成对线的内存有效方式(字符串匹配)

python - 将数据框插入到另一个数据框中每个组的行中

python - 在 Pyro4 应用程序中获取调用者的 IP

linux - 从外壳关闭套接字

linux - 如何在shell中打印前一周的周数