Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我会得到';用法:未找到命令';当我运行Perl脚本时?_Perl - Fatal编程技术网

为什么我会得到';用法:未找到命令';当我运行Perl脚本时?

为什么我会得到';用法:未找到命令';当我运行Perl脚本时?,perl,Perl,我是Perl新手。我使用了来自一个论坛的以下代码连接到其中一个服务器。但是抛出错误消息 [root@Cus]# cat tt.pl #!/usr/bin/perl use Net::Telnet; $telnet = new Net::Telnet ( Timeout=>2, Errmode=>'die'); $telnet->open('10.0.0.28'); $telnet->waitfor('/login:/'); $telnet->print('admin

我是Perl新手。我使用了来自一个论坛的以下代码连接到其中一个服务器。但是抛出错误消息

[root@Cus]# cat tt.pl
#!/usr/bin/perl
use Net::Telnet;
$telnet = new Net::Telnet ( Timeout=>2, Errmode=>'die');
$telnet->open('10.0.0.28');
$telnet->waitfor('/login:/');
$telnet->print('administrator');
$telnet->waitfor('/Password:/');
$telnet->print('test');
$telnet->waitfor('/switch8-12>/');
$telnet->print('whoamI');
$output=$telnet->waitfor('/switch8-12>/');
print $output;
但是抛出以下错误消息

[root@Cus]# ./tt.pl
./tt.pl: line 3: use: command not found
./tt.pl: line 4: syntax error near unexpected token `('
./tt.pl: line 4: `$telnet = new Net::Telnet ( Timeout=>2, Errmode=>'die');'

我猜您使用的是一种奇怪的unix风格,它不尊重
#行,并尝试通过shell而不是perl运行脚本

发生这种情况的另一个原因是
tt.pl
以空行开头。
#必须出现在文件的最开头


试着运行
perl tt.pl
,看看会发生什么。

我在脚本顶部没有看到这些行,它们对于所有perl模块和脚本都是必不可少的:

use strict;
use warnings;
你没有说这是在哪个环境下运行的——你在linux上使用bash吗?您使用的任何shell都不理解shebang(
#!/usr/bin/perl
),并且试图用自己的语言执行脚本,而不是调用perl来运行它


尝试使用/bin/bash,然后您的shebang行就可以工作了。或者,只需显式调用perl:
perl tt.pl

我有类似的错误消息,并发现原因是perl文件使用了错误的字符编码(不要问我为什么这对perl很重要)。Perl安装正确,路径有序,脚本语法完美(我甚至得到了一行“Hello World!”脚本的“use:command not found”错误)。检查tt.pl是否为UTF8无BOM。

如一条评论所述,“看起来开头有CR”。
如果你绝望地在这里……
然后运行
d2u script.pl


d2u
-->dos to unix.

如果
/usr/bin/perl
文件为空,也会发生同样的情况

我遇到同样的问题,并发现#上没有perl/usr/bin/perl。perl-v或/usr/bin/perl-v都不起作用

我为perl做了一个find/-name,然后添加了一个从/usr/bin到实际位置的符号链接

perl-v -找不到bash:perl:command /usr/bin/perl-v -bash:/usr/bin/perl:没有这样的文件或目录

find/-name perl /opt/ISS/bin/perl5/perl /opt/ISS/bin/perl

ln-s/opt/ISS/bin/perl/usr/bin/perl perl-v

这是为x86_64-linux构建的perl 5,版本14,subversion 1(v5.14.1)

版权所有1987-2011,拉里·沃尔

Perl只能在艺术许可证或 GNU通用公共许可证,可以在Perl5源代码工具包中找到

完整的Perl文档,包括常见问题列表,可以在 该系统使用“manperl”或“perldocperl”。如果您有权访问 Internet,将浏览器指向Perl主页

/usr/bin/perl-v

这是为x86_64-linux构建的perl 5,版本14,subversion 1(v5.14.1)

版权所有1987-2011,拉里·沃尔

Perl只能在艺术许可证或 GNU通用公共许可证,可以在Perl5源代码工具包中找到

完整的Perl文档,包括常见问题列表,可以在 该系统使用“manperl”或“perldocperl”。如果您有权访问
在Internet上,将浏览器指向Perl主页。

使用
#/usr/bin/env perl
位于脚本顶部

[root@CusCent5U2-64CX gannu]#perl tt.pl无法在@INC中找到Net/Telnet.pm其中,包括以下以下内容:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::/5.8.6/usr/5.5/usr/lib/lib5/5/5/5/4/5/5/5/5/5/5/4/lib64/4/5/5/5/5/4/4/5/5/5/5/5/5/5/5/5/5/5/5/5/5/4/4/4/4/4/4/4/4/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5/5采购商/供应商_perl/5.8.7/usr/lib/perl5/vendor_perl/5.8.6/usr/lib/perl5/vendor_perl/5.8.5/usr/lib/perl5/vendor_perl/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/usr/lib/perl5/5.8.8.)在tt.pl第5行。开始失败——编译在tt.pl第5行中止[root@CusCent5U2-64CX甘努]#./tt.pl./tt.pl:line 3:use:command not found./tt.pl:line 4:use:command not found./tt.pl:line 5:use:command not found./tt.pl:line 6:unexpected token附近的语法错误
('./tt.pl:line 6:
$telnet=new Net::telnet(Timeout=>2,Errmode=>'die');'[root@CusCent5U2-64CX甘努]#将澄清信息和更新添加到您的答案中。不要将其隐藏在评论中。您的“找不到…”问题的答案在Stackoverflow上的许多地方。请尝试SO serach框:)这些是shell错误,不是Perl错误。您能告诉我们您使用的是哪种设置吗?一开始似乎有一个
CR
。发布
xxd tt.pl
od tt.pl
的输出。“Perl-v”显示了什么?您的路径上是否有一个名为“Perl”的东西,而实际上不是Perl解释器?(我承认有点长。)我也有同样的问题,在我的文件前面使用perl对我来说很有效。这意味着什么?如果使用工具(如windows记事本)保存,则是它可以添加一个BOM标记字节。而不是打乱#!,但不可见。伙计,当时我花了一个下午的大部分时间才弄明白,因为大多数文本编辑器当然会自动“正确”解释和显示字符编码。