说我有一个文件你好:
#!/bin/sh
echo "Hello World!"
如果在该文件上设置了可执行位,我可以通过在提示符下输入其路径来执行它:
$ ./hello
Hello World!
有没有更明确的与上面的等效的?类似于:
$ execute hello
我知道我可以通过你好作为 的参数/bin/sh
,但我正在寻找一种自动使用 shebang 行中指定的解释器的解决方案
我的用例是执行没有设置可执行标志的脚本文件。这些文件存储在 git 存储库中,因此我想避免设置它们的可执行标志或必须先将它们复制到另一个位置。
答案1
答案2
以下 Perl5 脚本没有错误检查,抓取 hashbang 行并调用它来执行作为参数传递的脚本:(根据 ilkkachu 的评论进行简化和精简),以避免读取整个文件...
open FH, ("<",$ARGV[0])
$line = <FH>;
close FH;
if ($line =~ /^\#\!(.*)/) {
$engine = $1;
exec("$engine $ARGV[0]");
}