相当于通过输入文件路径来执行文件(使用 shebang 行)?

相当于通过输入文件路径来执行文件(使用 shebang 行)?

说我有一个文件你好:

#!/bin/sh

echo "Hello World!"

如果在该文件上设置了可执行位,我可以通过在提示符下输入其路径来执行它:

$ ./hello
Hello World!

有没有更明确的与上面的等效的?类似于:

$ execute hello

我知道我可以通过你好作为 的参数/bin/sh,但我正在寻找一种自动使用 shebang 行中指定的解释器的解决方案

我的用例是执行没有设置可执行标志的脚本文件。这些文件存储在 git 存储库中,因此我想避免设置它们的可执行标志或必须先将它们复制到另一个位置。

答案1

您可以使用perl

perl hello

perl文档:

如果#!该行不包含单词“perl”,也不包含单词“indir”,该程序以#!命名。代替 Perl 解释器执行。这有点奇怪,但它可以帮助那些不执行 #! 的机器上的人,因为他们可以告诉程序他们的 SHELL 是 /usr/bin/perl,然后 Perl 会将程序分派给他们的正确解释器。

通过

答案2

以下 Perl5 脚本没有错误检查,抓取 hashbang 行并调用它来执行作为参数传递的脚本:(根据 ilkkachu 的评论进行简化和精简),以避免读取整个文件...

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

相关内容