首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误的解释器: perl脚本中没有这样的文件或目录(适用于perl脚本的初学者)

错误的解释器: perl脚本中没有这样的文件或目录(适用于perl脚本的初学者)
EN

Stack Overflow用户
提问于 2016-05-20 07:30:33
回答 4查看 8.3K关注 0票数 0

我们创建了1个perl脚本,它将从一个远程服务器运行并访问该服务器,并将通过为特定进程运行top命令来获取数据。但是,每当我尝试运行该脚本时,我都会遇到下面的错误。

我们创建的./script_GS.pl -bash: ./script_GS.pl: /usr/local/share/perl^M: bad interpreter: No such file or directory脚本如下。

代码语言:javascript
复制
#!/usr/bin/perl
use lib "/usr/CSV-2/lib";
use lib "/usr/share/lib";
use lib "/usr/local/lib/perl/5.10.1/auto/"; 
use lib "/usr/share/man/man3/";
use lib "/usr/local/share/man/man3/";

my $username = 'root';
my $password = 'xxxxxxxx';
my $ip = '1.1.1.1';
my $TERM ;
my $ssh = Net::OpenSSH->new("$username:$password\@$ip", timeout => 30);
$ssh->system("echo $TERM");
$ssh->system("export TERM=xterm");
my ($CPU,$stderr) = $ssh->capture("top -b | head -n 8 | grep -w gis | awk '{    
print \$6}' ");

print "CPU:".$CPU." ";

请高年级学生帮忙。

我得到的错误是

代码语言:javascript
复制
 ./Script_GS.pl
 Can't locate object method "new" via package "Net::OpenSSH" (perhaps you   
 forgot to load "Net::OpenSSH"?) at ./Script_GS.pl line 12.
EN

回答 4

Stack Overflow用户

发布于 2016-05-20 07:40:38

您有Windows行结尾,但您是在Unix系统上运行该脚本。

要解决此问题,您可以使用dos2unix script_GS.pl,或者如果该命令不可用,则使用vi script_GS.pl,然后在编辑器中键入:set ff=unix,然后依次按ENTER、:wq和ENTER。

票数 3
EN

Stack Overflow用户

发布于 2016-05-20 20:52:14

显然,您不是在导入NET::SSH,而是在使用它。这就像在java中使用JDBC conn而不导入java.sql.*包一样。

这样在脚本顶部使用Net::OpenSSH;的代码应该可以修复这个错误,但是如果你真的是新手,那么要准备好遇到像can't locate in @INC之类的错误。因此,在使用高级perl包NET::OpenSSH之前,可能需要先学习基本的perl课程。

票数 1
EN

Stack Overflow用户

发布于 2016-05-20 07:42:27

您已将文件从Windows传输到Unix/Linux,而不更改换行符。(ftp中的ascii模式)

之后有很多工具和方法可以做到这一点。

在vi中:

代码语言:javascript
复制
:%s/^M//g

要输入^M:键入

按Ctrl-V + ENTER

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37335674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档