You're right. command_remove_mode does have an impact. For instance on CentOS at the time of initialization Net::Telnet object, if I'm setting cmd_remove_mode as 0, then I'm able to get command output without command. Here are the logs for the same
my $ssh = new Net::Telnet (
-fhopen => $pty,
-prompt => $args{prompt},
-telnetmode => 0,
-cmd_remove_mode => 1,
-timeout => SSH_TIMEOUT,
-output_record_separator => "\r",
#-errmode => sub { print "Telnet FAIL\n"; }
);
Output of script execution
[root@hyd1658 attribute_template]# perl test_centos.pl
output is Thu Jul 4 11:18:18 IST 2019
[root@hyd1658 ~]
However, if I set cmd_remove_mode as 1 then the output is getting choped. Here are the logs-
my $ssh = new Net::Telnet (
-fhopen => $pty,
-prompt => $args{prompt},
-telnetmode => 0,
-cmd_remove_mode => 1,
-timeout => SSH_TIMEOUT,
-output_record_separator => "\r",
#-errmode => sub { print "Telnet FAIL\n"; }
);
Output of script execution
[root@hyd1658 attribute_template]# perl test_centos.pl
output is [root@hyd1658 ~]
This(chopping of 1 line of output) does make sense from the following piece of code of Net::Telnet
sub cmd {
.
.
.
## Determine if we should remove the first line of output based
## on the assumption that it's an echoed back command.
if ($cmd_remove_mode eq "auto") {
## See if remote side told us they'd echo.
$telopt_echo = $self->option_state(&TELOPT_ECHO);
$remove_echo = $telopt_echo->{remote_enabled};
}
else { # user explicitly told us how many lines to remove.
$remove_echo = $cmd_remove_mode;
}
## Get rid of possible echo back command.
while ($remove_echo--) {
shift @$output;
}
.
.
.
But in either case, the command sent should have been echoed in the output, which in this case is not happening. Do you have any suggestion on what could be its root cause or what piece of code is responsible for this. |