我正在尝试使用if条件检查命令是否已通过,但它无效。即使挂载成功,它也会失败。当我输入此命令时,它会重新启动到没有任何消息的提示,因此我将与“”进行比较。当我执行目标文件夹的“ls”时,它会显示源文件夹的所有内容。有帮助吗?我的if条件是否正确?
my $port = new Net::Telnet->new(Host=>$ip,Port=>$ip_port,Timeout => "$timeout", Dump_Log => "dumplog.log", Errmode=> "return" );
if($port->cmd("mount -t nfs -o nolock <path-of-source-folder> <destination-folder>") eq "")
{
print "Successful\n";
}
else{
print "Failed.\n ";
}
答案 0 :(得分:1)
在标量上下文中,Net :: Telnet cmd
方法在成功时返回1(不是字符串)。你的支票应该是这样的:
if ($port->cmd("mount -t nfs -o nolock <path-of-source-folder> <destination-folder>") == 1)
{
print "Successful\n";
} else {
print "Failed.\n";
}
如果您确实想从mount
命令收集输出并检查它,则必须在列表上下文中调用它或传递stringref参数,如下所示:
my @outlines = $port->cmd("mount ...");
或者:
my $out;
my $ret = $port->cmd("mount ...", [Output => \$out]);
if ($ret == 1)
{
# inspect $out
}
有关详情,请参阅Net::Telnet documentation。
答案 1 :(得分:0)
您检查结果似乎是错误的。 Net::Telnet的文件说明了
此方法发送命令$ string,并读取命令发回的字符,直到并包括匹配的提示符。它假设你要发送的程序是某种命令,提示解释器,如shell。 命令$ string会自动附加output_record_separator,默认情况下为&#34; \ n&#34;。这类似于某人输入命令并点击返回键。设置output_record_separator以更改此行为。
在标量上下文中,从远程端读取的字符将被丢弃,成功时将返回1。
所以你需要检查一个标量上下文
if ($port->cmd("..") ) {
...
}