我知道shebang这样的行:
Error:(168, 1) error: class, interface, or enum expected
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.
但我发现我也可以像这样使用shebang线:
#!/bin/sh
这让我感到困惑,有人可以向我解释一下Linux将如何处理这个问题?
答案 0 :(得分:7)
env
是Unix程序的名称。如果您阅读了手册(man env
),则可以看到使用它的一种方法是env COMMAND
,在您的情况下,COMMAND
为python3
。
根据手册,这将
在环境中将每个NAME设置为VALUE并运行COMMAND。
单独运行env
将显示设置的NAME和VALUE:
$ env
TERM=xterm-256color
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
…
因此,/usr/bin/env python3
是设置PATH
(以及所有其他NAME + VALUE对)的指令,然后使用{中的第一个目录运行python3
{1}}包含PATH
可执行文件。
答案 1 :(得分:1)
较新的* nix版本将以与which
命令相同的方式解决此问题。
它查找在环境变量$ PATH中设置的所有目录,无论是设置它(全局,在.bashrc或其他登录脚本中还是手动),都是逐个返回第一个匹配。
重要的是,某些Linux版本会创建别名文件(也就是符号链接),例如:的Debian。
另一个注意事项:bash命令别名会覆盖此行为,因为它首先执行。
答案 2 :(得分:0)
基本上像
tail -n +1 yourfile | /usr/bin/env python
答案 3 :(得分:0)
#!/bin/sh
只是解释器二进制文件的路径,而
#!/usr/bin/env python3
将解释器的路径传递给python3
作为#!/usr/bin/env
解释器的可选参数
请参阅wiki了解详情。