in reply to Re^3: Telnet command with more than 1024 chars (updated)
in thread Telnet command with more than 1024 chars

Hello thanos1983!

Well, I decided to use a different approach instead of using $t->print and $t->waitfor, I decided to use line continuation character, and I discovered it worked very well! I found this code here and adapted for my needs, on which it fitted well. There says some shells have a limitation of 255 characters line limit.

sub cmd_unixlong { my ($obj, $cmd) = @_; my ($line, $pos); my $max_tty_line = 254; ## Start a Bourne shell. $obj->cmd(-string => "/usr/bin/env " . "'PS1=<xPROMPTx> ' 'PS2=<xPROMPTx> ' /bin/sh -i", -prompt => '/<xPROMPTx> $/') or return; ## Break-up the one large command line and send as shorter lin +es. $pos = 0; while (1) { $line = substr $cmd, $pos, $max_tty_line; $pos += length $line; last unless $pos < length $cmd; ## Send the line with continuation char. $obj->cmd(-string => "$line\\", -prompt => '/<xPROMPTx> $/') or return; } ## Send the last line and return the output. $obj->cmd("$line ; exit"); } # end sub cmd_unixlong
I'm still using telnet, so I changed it to something more or less like this:
sub cmd_telnetlong { my ($obj, $cmd) = @_; my ($line, $pos); my $max_tty_line = 254; ## Break-up the one large command line and send as shorter lin +es. $pos = 0; while (1) { $line = substr $cmd, $pos, $max_tty_line; $pos += length $line; last unless $pos < length $cmd; ## Send the line with continuation char. $obj->cmd(-string => "$line^", -prompt => '/More?/i') or return; } ## Send the last line and return the output. return $obj->cmd("$line ; exit"); } # end sub cmd_unixlong

As I haven't found anything to solve the line limitation, this workaround served me very well! Thanks all for your time!