我有一个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'可能会解决问题。