我有一个关于如何在shell脚本中执行perl文件的问题
我现在有两个文件,“test.sh”和“test.pl”,这里是我的脚本示例
SHELL脚本
#!/bin/bash
perl FILEPATH/test.pl
......
PERL脚本
#!/usr/bin/perl
my $a = "hello"
sub saysomething
{
print $a;
}
.....
我调用shell脚本的方式是:在shell脚本的路径下,执行“./test.sh”
上面提到的都是在GUN bash环境下工作,版本4.2.24(1)-release(i686-pc-linux-gnu)perl(v5.14.2)
但是,如果我把这些脚本放在服务器上(我无法更改bash / perl版本)GNU bash,版本4.2.10(1)-release(x86_64-pc-linux-gnu)perl(v5.12.4),我得到了以下信息:
FILEPATH / test.pl:第2行:my:命令未找到
有谁知道我该如何解决这个问题?
顺便说一句,如果我单独执行perl脚本(perl FILEPATH / FILENAME.pl),它可以很好地工作 .
4 回答
为了通过.sh脚本执行perl脚本,您不需要使用perl前缀,但仅限于:
它会毫无问题地工作 .
“未找到命令”是shell发出的错误 . 您正在尝试通过shell运行Perl脚本,而不是通过Perl运行 .
首先检查系统上安装perl的位置,例如
which perl
并在shebang行中使用该位置而不是/usr/bin/perl
,如果它不同的话 .如果所有其他建议都失败,请通过执行以下操作检查计算机上未正常运行的脚本的第一行:
head -1 test.pl | xxd
. 输出是否将最后两个字节显示为0d 0a
?如果是这样,您可能通过Windows复制了文件,并且没有进行dos2unix转换 .这个问题至少是双重的 . 一,您必须在您的环境PATH中拥有Perl的位置 . 二,Perl的位置可能在不同的机器上有所不同 . 我和其他人多年来使用的两个问题的一个解决方案是在Perl程序的顶部使用某种类型的“魔术头” . 标头将自身标识为sh shell脚本,并利用/ bin / sh存在于Linux / UNIX的每个版本/风格中的事实 . Headers 的工作是用各种可能的Perl位置强化PATH,然后运行Perl脚本代替它自己(通过exec) . 这是一个“Hello World”示例:
注意:我添加了行号,以便清楚地显示行的开始和结束位置 .