糟糕的解释器:perl脚本中没有这样的文件或目录(对于perl脚本初学者)

糟糕的解释器:perl脚本中没有这样的文件或目录(对于perl脚本初学者),perl,Perl,我们创建了1个perl脚本,它将从一个远程服务器运行并访问服务器,并将通过运行特定进程的top命令来获取数据。然而,每当我尝试运行脚本时,我都会发现下面的错误 /script\u GS.pl -bash:./script\u GS.pl:/usr/local/share/perl^M:bad解释器:没有这样的文件或目录 我们创建的脚本如下 #!/usr/bin/perl use lib "/usr/CSV-2/lib"; use lib "/usr/share/lib"; use lib "/

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

/script\u GS.pl
-bash:./script\u GS.pl:/usr/local/share/perl^M:bad解释器:没有这样的文件或目录
我们创建的脚本如下

#!/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." ";
请长者帮忙

我得到的错误是

 ./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.

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


要解决此问题,您可以使用
dos2unix script\u GS.pl
,或者如果不可用,
vi script\u GS.pl
,然后在编辑器中键入
:set ff=unix
,然后单击ENTER,然后单击
:wq
,然后再次输入。

您有Windows行结尾,但您正在unix系统上运行脚本


要解决此问题,您可以使用
dos2unix script\u GS.pl
,或者如果不可用,
vi script\u GS.pl
,然后在编辑器中键入
:set ff=unix
,然后按ENTER键,然后按
:wq
,然后再次按ENTER键。

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

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

在第六章:

:%s/^M//g
要输入^M,请键入

Ctrl-V+ENTER


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

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

在第六章:

:%s/^M//g
要输入^M,请键入

Ctrl-V+ENTER


您的perl脚本似乎没有检测到Net::OpenSSH模块。重新安装此模块应有帮助。在导入库代码上方还包括“use Net::OpenSSH;”。

您的perl脚本似乎没有检测到Net::OpenSSH模块。重新安装此模块应有帮助。在导入库代码上方还包括“use Net::OpenSSH;”。

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


类似于使用Net::OpenSSH应该修复此错误,但如果您真的是新手,请准备好遇到诸如无法在@INC中定位之类的错误。因此,在使用高级perl包NET::OpenSSH之前,您可能需要先学习基本的perl课程。

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


类似于使用Net::OpenSSH应该修复此错误,但如果您真的是新手,请准备好遇到诸如无法在@INC中定位之类的错误。因此,在使用高级perl软件包NET::OpenSSH之前,您可能需要先学习基本的perl课程。

我也做了同样的事情,现在我看到下面的错误-bash:./Script\u GS.pl:/usr/local/share/perl:bad解释器:没有这样的文件或directory@LiveCom当前位置
/usr/local/share/perl-v
的输出是什么?@Stevieb我想我明白你的意思了。。我纠正了这一点,但现在它给了我不同的错误,我在上面的脚本模式中更新了它。您必须安装
Net::SSH
,然后将
use Net::SSH
放在脚本的顶部。你也应该把
使用严格
使用警告也是。另外,你应该问一个新问题,而不是在现有的线程中问一个新问题。我做了同样的事情,现在我发现了下面的错误-bash:./Script\u GS.pl:/usr/local/share/perl:bad解释器:没有这样的文件或directory@LiveCom当前位置
/usr/local/share/perl-v
的输出是什么?@Stevieb我想我明白你的意思了。。我纠正了这一点,但现在它给了我不同的错误,我在上面的脚本模式中更新了它。您必须安装
Net::SSH
,然后将
use Net::SSH
放在脚本的顶部。你也应该把
使用严格
使用警告也是。另外,你应该问一个新问题,而不是在现有的线程中问一个新问题。你得到了问题的答案。如果你有新问题,请用新问题提问。(或者只是寻找答案)你的问题有答案了。如果你有新问题,请用新问题提问。(或者只是寻找答案)“显然”这里的屈尊俯就很高。“显然”这里的屈尊俯就很高。