我有一个像这样开始的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
命令的任何特殊方法?
答案 0 :(得分:2)
正如评论中所说,你的脚本出于某种原因通过shell执行。你可以研究它为什么会这样并修复它。
或者您可以使用以下技巧解决问题:
#!/usr/bin/perl
eval 'exec /usr/bin/perl "$0" "$@"'
if 0; # not running under some shell
print "Args: @ARGV\n";
如果通过perl评估此脚本,if 0;
行将阻止eval执行。
但是,shell没有后缀条件,所以它只执行第一行,它运行正确的解释器。
事实上,一个数字,不, NUMBER 的perl脚本就是这样开始的。谷歌这个“没有在一些shell下运行”的例子(和SO {和explanation)。
答案 1 :(得分:0)
删除'#!/ usr / bin / bash'是一个好主意,因为它是多余的。 在脚本中调用'/ usr / bin / perl Info.pl'可能会解决问题。