Perl"使用:命令未找到"从bash脚本运行时

时间:2015-05-05 19:09:21

标签: linux bash perl syntax-error command-line-interface

我有一个像这样开始的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命令的任何特殊方法?

2 个答案:

答案 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'可能会解决问题。