我知道家當一行:/usr/bin/env如何在Linux shebang行中工作?
#!/bin/sh
,但我發現我也可以使用shebang行是這樣的:
#!/usr/bin/env python3
這混淆了我,可有人向我解釋Linux將會如何處理這一?
我知道家當一行:/usr/bin/env如何在Linux shebang行中工作?
#!/bin/sh
,但我發現我也可以使用shebang行是這樣的:
#!/usr/bin/env python3
這混淆了我,可有人向我解釋Linux將會如何處理這一?
較新的* nix版本將以與which
命令相同的方式解決此問題。
它會在所有設置在環境變量$ PATH中的目錄中查找,無論它是否被設置(全局,在.bashrc或其他登錄腳本中或手動)中,一個一個地返回第一個匹配項。
重要的是,一些linux版本創建別名文件(又名符號鏈接),例如, Debian的。
另一個說明:bash命令別名在首先執行時會覆蓋此行爲。
本質上喜歡
tail -n +1 yourfile | /usr/bin/env python
env
是一個Unix程序的名稱。如果您閱讀手冊(man env
),您可以看到一種使用方法是env COMMAND
,在您的情況下,COMMAND
是python3
。
根據手冊,這將
設置每個名稱在環境中的價值和運行命令。
單獨運行env
將顯示您設置了什麼樣的名稱和值:
$ 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
(以及所有其他名稱+值對),並指令然後運行python3
,使用PATH
中的第一個目錄包含python3
可執行文件。
#!/bin/sh
是解釋程序二進制文件的唯一路徑,而
#!/usr/bin/env python3
具有傳遞python3
作爲可選參數的#!/usr/bin/env
解釋
請參考wiki更多的信息解釋的路徑。
'python'退出後,變量是否在本地shell中保留?或者他們只是python本地的? – Pacerier
@Pacerier'env'中的名稱/值對始於shell開始;所以是的,他們堅持殼。 –