use*_*968 5 linux shebang environment-variables
我知道shebang这样的:
#!/bin/sh
Run Code Online (Sandbox Code Playgroud)
但我发现我也可以像这样使用shebang线:
#!/usr/bin/env python3
Run Code Online (Sandbox Code Playgroud)
这让我感到困惑,有人可以向我解释一下Linux将如何处理这个问题?
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
…
Run Code Online (Sandbox Code Playgroud)
因此,/usr/bin/env python3是一个设置PATH(以及所有其他NAME + VALUE对),然后python3使用PATH包含python3可执行文件的第一个目录运行的指令.
小智 8
较新的 *nix 版本将以与命令相同的方式解决此问题which。
它会逐一查找在环境变量 $PATH 中设置的所有目录,无论其设置在何处(全局、在 .bashrc 或其他登录脚本中或手动设置),并返回第一个匹配项。
重要的是,某些 Linux 版本会创建别名文件(也称为符号链接),例如 debian。
另请注意:bash 命令别名会覆盖此行为,因为它首先执行。
| 归档时间: |
|
| 查看次数: |
9005 次 |
| 最近记录: |