Bash

執行以 shebang 為名稱且具有相同參數的腳本時執行的實際命令是什麼?

  • November 10, 2021

來自關於 shebang 的 bash 手冊

大多數 Unix 版本都將其作為作業系統命令執行機制的一部分。如果腳本的第一行以兩個字元“#!”開頭,則該行的其餘部分指定程序的解釋器。因此,您可以指定 Bash、awk、Perl 或其他一些解釋器,並用該語言編寫腳本文件的其餘部分。

解釋器的參數由腳本文件第一行解釋器名稱後面的單個可選參數組成,然後是腳本文件的名稱,然後 是其餘參數。Bash 將在不自行處理它的作業系統上執行此操作。請注意,一些舊版本的 Unix 將解釋器名稱和參數限制為最多 32 個字元。

“可選參數”是指選項的參數,還是可能存在或不存在的參數?

為什麼是“單個可選參數”?它不允許多個“可選參數”嗎?

如果腳本看起來像

#! /path/to/interpreter --opt1 opt1-arg --opt2 opt2-arg --opt3 nonopt-arg1 nonopt-arg2

...

當我在 bash 中執行腳本時

$ myscript arg1 arg2 arg3

在 bash 中執行的實際命令是什麼?是嗎

$ /path/to/interpreter --opt1 opt1-arg --opt2 opt2-arg --opt3 nonopt-arg1 nonopt-arg2 myscript arg1 arg2 arg3

謝謝。

在這種情況下,解釋器的參數是在解釋 shebang 行之後構造的參數,將 shebang 行與腳本名稱及其命令行參數結合起來。

因此,一個 AWK 腳本以

#! /usr/bin/awk -f

命名myscript

./myscript file1 file2

導致實際參數

/usr/bin/awk -f ./myscript file1 file2

-f在這種情況下,單個可選參數是。並非所有的口譯員都需要一個(參見/bin/sh範例),許多系統最多只允許一個口譯員(所以你的 shebang 行不會像你期望的那樣工作)。參數可以包含空格;解釋器之後的 shebang 行的全部內容作為單個參數傳遞。

要嘗試使用 shebang 線,您可以使用#! /bin/echo(儘管在涉及空格時這無助於區分參數)。

有關如何處理 shebang 行(在 Linux 上)的更詳細說明,請參閱程序如何執行

引用自:https://unix.stackexchange.com/questions/387304