【问题标题】:Calling a perl script as a shell command将 perl 脚本作为 shell 命令调用
【发布时间】:2011-04-01 20:52:52
【问题描述】:

我想从命令行调用我的 perl 脚本作为命令。 例如,假设我有一个 perl 文件,如下所示

#!/usr/local/bin/perl -w
@args =("mvn","package");
    system(@args) == 0
    or die "system @args failed"

我没有使用 package.pl 来调用它

我尝试了以下操作

#!/bin/sh
  eval 'exec /bin/perl –x -S $0 ${1+"$@"}'
    if 0; 
#!/usr/local/bin/perl -w
@args =("mvn","package");
    system(@args) == 0
    or die "system @args failed"

然后将文件命名为 'package' .Do chmod on package

当我尝试运行包时,我得到了错误 "无法打开 perl 脚本 []x:No such file or directory

有人可以指出我如何正确地做到这一点吗?

谢谢

尼拉杰

【问题讨论】:

  • 您需要在评估中使用双引号,而不是单引号。
  • 你的 perl 文件不需要以 .pl 结尾:Perl 不在乎。只需在名为package 的文件顶部使用#!/usr/local/bin/perl -w。文件名后缀其实只是 Dos/Windows 的东西
  • 似乎仍然抛出同样的错误。
  • 你的 perl 可执行文件到底在哪里? /bin/perl 还是 /usr/local/bin/perl?

标签: perl shell exec


【解决方案1】:

更改为您要使用的名称并使其可执行:

cp package.pl package
chmod +x package

运行它:

package

或:

./package

【讨论】:

  • 或 alias 如果您使用的是 *NIX。
【解决方案2】:

将单引号更改为双引号并转义内部双引号。此外,路径似乎存在一些问题。尝试使用绝对路径调用您的脚本。我尝试添加“./”并且它起作用了:

#!/bin/sh

echo "This is shell"

eval "exec /usr/bin/perl -x -S ./$0 ${1+\"$@\"}"
   if 0;

#!/usr/bin/perl -w
print "This is Perl\n";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-21
    • 2011-03-13
    • 2011-01-04
    • 1970-01-01
    • 2017-10-24
    • 2021-09-08
    • 2012-04-15
    • 2016-06-19
    相关资源
    最近更新 更多