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

标签 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 命令?

最佳答案

正如评论中所述,由于某种原因,您的脚本是通过 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 脚本就是这样开始的。谷歌这个“不在某些外壳下运行”作为示例(以及 explanation )。

关于linux - 从 bash 脚本运行时 Perl "use: command not found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30061285/

相关文章:

bash - 如何在 bash 字符串切碎中切碎字符串的最后 n 个字节?

linux - SSH 使用 Perl 脚本在远程站点创建目录

perl - 使用 n-gleton 模式表示(并导出)n 个独特的事物?

linux - 在 systemd 服务文件中/内联添加 shell 命令

java - BoxLayout 中按钮的水平放置取决于操作系统

linux - 自动化 Linux 软件安装

linux - bash 脚本来替换单词

perl - 从使用 Perl 创建的 Excel 2007 文件中读取标题行时出现问题

c++ - 写入单个大数据文件或多个较小文件: Which is faster?

c - 如何在 Linux 内核中将 char[] 字符串转换为 int?