Perl 从 bash 脚本运行时"use: command not found"



我有一个perl脚本 Info.perl

#!/usr/bin/perl
#!/usr/bin/bash
use List::Util qw( min max );
use List::MoreUtils qw{ all any };
use Cwd;
use Data::Dumper qw(Dumper);
use Env qw(INFODIR CONFDIR PROCDIR);

,当我从终端运行它时,它没有问题并按预期工作。

,但是我有一个bash脚本 run.sh,只有它

./Info.pl

,当我运行此脚本时,我会收到以下错误

./Info.pl: line 4: syntax error near unexpected token `('
./Info.pl: line 4: `use List::Util qw( min max );'

如果我省略了第4行,我会收到以下消息:

./Info.pl: line 5: use: command not found
./Info.pl: line 6: use: command not found
./Info.pl: line 7: syntax error near unexpected token `('
./Info.pl: line 7: `use Data::Dumper qw(Dumper);'

我需要有什么特殊方法来运行bash脚本内的perl脚本吗?或使用use命令的任何特殊方法?

如评论中所述,由于某种原因,您的脚本正在通过Shell执行。您可以研究为什么这样并修复它。

,也可以使用以下技巧来解决:

#!/usr/bin/perl
eval 'exec /usr/bin/perl "$0" "$@"'
    if 0; # not running under some shell
print "Args: @ARGVn";

如果通过Perl评估此脚本,则if 0;行可防止评估执行。

但是,Shell没有后缀条件,因此它只是执行第一行,该行运行正确的解释器。

实际上,perl脚本的数字,no,a 数字以这种方式开始。Google这个"不在某个外壳下运行"以获取示例(以及SO的解释)。

删除'#!/usr/bin/bash'将是一个好主意,因为它是冗余的。脚本中调用'/usr/bin/perl info.pl'可能会解决问题。

相关内容

  • 没有找到相关文章

最新更新