Shell 指令碼頭的用途

Nilesh Katuwal 2022年5月11日
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

它使用引數 barbaz 執行。

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 的值 barbaz 執行和 $2,分別。

直譯器也會忽略整個 shebang 行,因為初始數字符號以 Bourne shell 語言和許多其他直譯器理解的語言啟動註釋。

直譯器決定是否忽略 shebang 行。

相關文章 - Linux Bash