我们创建了1个perl脚本,它将从一个远程服务器运行并访问该服务器,并将通过为特定进程运行top命令来获取数据。但是,每当我尝试运行该脚本时,我都会遇到下面的错误。
我们创建的./script_GS.pl -bash: ./script_GS.pl: /usr/local/share/perl^M: bad interpreter: No such file or directory脚本如下。
#!/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.发布于 2016-05-20 07:40:38
您有Windows行结尾,但您是在Unix系统上运行该脚本。
要解决此问题,您可以使用dos2unix script_GS.pl,或者如果该命令不可用,则使用vi script_GS.pl,然后在编辑器中键入:set ff=unix,然后依次按ENTER、:wq和ENTER。
发布于 2016-05-20 20:52:14
显然,您不是在导入NET::SSH,而是在使用它。这就像在java中使用JDBC conn而不导入java.sql.*包一样。
像这样在脚本顶部使用Net::OpenSSH;的代码应该可以修复这个错误,但是如果你真的是新手,那么要准备好遇到像can't locate in @INC之类的错误。因此,在使用高级perl包NET::OpenSSH之前,可能需要先学习基本的perl课程。
发布于 2016-05-20 07:42:27
您已将文件从Windows传输到Unix/Linux,而不更改换行符。(ftp中的ascii模式)
之后有很多工具和方法可以做到这一点。
在vi中:
:%s/^M//g要输入^M:键入
按Ctrl-V + ENTER
https://stackoverflow.com/questions/37335674
复制相似问题