Shell 指令碼頭的用途
在程式設計中,shebang 是一系列標籤和感嘆號 #!
在檔案的開頭。然後提供將執行檔案程式碼的直譯器的整個路徑/bin/bash
。
之後,就是程式碼本身。直譯器通常會忽略 shebang 行,因為 #
字元是許多指令碼語言中的註釋標記。
Shebang 語法
shebang 直譯器指令採用以下形式。
#!interpreter [optional-arg]
在大多數情況下,直譯器是可以執行的程式的唯一絕對路徑。
可選引數是由字串表示的單個引數。 #!
之後不需要空格。
在以下條件下,可以在 Linux 中執行檔案。
- 直譯器的檔案有執行許可權,包含核心可以直接執行的程式碼。
- 該檔案定義了一個
sysctl
包裝器,例如使用wine
執行任何.exe
檔案。 - 該檔案包含一個 shebang。
Linux 上的直譯器也可以是指令碼。一連串的 shebang 和包裝器生成一個直接可執行檔案,該檔案將指令碼的順序反轉為輸入。
Shebang 的例子
下面是一些典型的 Shebang 行的例子。
#!/bin/sh
使用 Bourne shell 或其他相容的 shell 來執行該檔案,該檔案假定位於 /bin
目錄中。
#!/bin/bash
使用 Bash shell 執行該檔案。
#!/usr/bin/pwsh
使用 PowerShell 執行該檔案。
#!/usr/bin/env python3
使用 Python 直譯器執行它,並使用 env
程式搜尋路徑查詢它。
#!/bin/false
它返回一個非零退出狀態,表示失敗而不是什麼都不做。它用於防止為在特定上下文中使用而設計的指令碼檔案(例如 sh/bash
)獨立執行。
社邦的宗旨
通過消除在命令列上將其直譯器置於指令碼之前的需要,直譯器指令允許將指令碼和資料檔案用作命令,從而使使用者和其他程式的實現的複雜性變得模糊。
由路徑 some/path/to/foo
標識的 Bourne shell 指令碼的第一行如下所示。
#!/bin/sh -x
它使用引數 bar
和 baz
執行。
some/path/to/foo bar baz
它產生與以下命令列相同的結果。
/bin/sh -x some/path/to/foo bar baz
如果 Bourne shell 由 /bin/sh
指定,則檔案 some/path/to/foo
中的所有 shell 命令都使用位置變數 $1
的值 bar
和 baz
執行和 $2
,分別。
直譯器也會忽略整個 shebang 行,因為初始數字符號以 Bourne shell 語言和許多其他直譯器理解的語言啟動註釋。
直譯器決定是否忽略 shebang 行。