Shell-Script

相當於通過輸入文件的路徑來執行文件(使用 shebang 行)?

  • August 26, 2021

說我有一個文件你好

#!/bin/sh

echo "Hello World!"

如果在該文件上設置了可執行位,我可以通過在提示符上輸入其路徑來執行它:

$ ./hello
Hello World!

是否有更明確的等價於上述內容?類似於:

$ execute hello

我知道我可以將hello作為參數傳遞給/bin/sh,但我正在尋找一種自動使用 shebang 行中指定的解釋器的解決方案

我的案例是執行沒有設置可執行標誌的腳本文件。這些文件儲存在 git 儲存庫中,因此我想避免設置它們的可執行標誌或必須先將它們複製到另一個位置。

您可以使用perl

perl hello

來自perl文件

如果#! 該行不包含單詞“perl”或單詞“indir”,以#! 命名的程序 被執行而不是 Perl 解釋器。這有點奇怪,但它可以幫助機器上不執行#! 的人,因為他們可以告訴程序他們的 SHELL 是 /usr/bin/perl,然後 Perl 會為他們分派程序到正確的解釋器。

通過

以下 Perl5 腳本,沒有錯誤檢查,抓取 hashbang 行並呼叫它來執行作為參數傳遞的腳本:(根據 ilkkachu 的評論簡化和簡化),以避免讀取整個文件……

open FH, ("<",$ARGV[0])
$line = <FH>;
close FH;
if ($line =~ /^\#\!(.*)/) {
   $engine = $1;
   exec("$engine $ARGV[0]");
}

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