in reply to Re: Expecting more from expect
in thread Expecting more from expect

Hmmm. Maybe this is a bug in my version of PERL (v5.6.1 on Linux). I made the following test program called "test.pl":
#!/usr/bin/perl use strict; use Expect; my $object = Expect->spawn( "bash" ) or die "Could not spawn bash shell.\n"; $object->log_stdout(0); $object->max_accum( 128 * 512 ); my $header = "Test Log Header"; $object->send( "cat test_log.txt\n" ); my ($matched_pattern_position, $error, $successfully_matching_string, $before_match, $after_match) =$object->expect( 5 , -re => $header ); if( $error ne undef ) { die "Could not find header.\n"; } my @rows = split /^/ , $after_match; printf "Found %d lines after match in file.\n", scalar( @rows );
And created the file "test_log.txt" that looks something like this:
Test Log Header 040702003113 21% 1175 1859 8239 8744 2221 0 0 4 100% 7% T 6% 040702003113 21% 1175 1859 8239 8744 2221 0 0 4 100% 7% T 6% 040702003113 21% 1175 1859 8239 8744 2221 0 0 4 100% 7% T 6% 040702003113 21% 1175 1859 8239 8744 2221 0 0 4 100% 7% T 6% 040702003113 21% 1175 1859 8239 8744 2221 0 0 4 100% 7% T 6% ...for 160 lines...
Then see the following:
Output of "wc test_log.txt": 161 2243 9776 test_log.txt Ouput of "test.pl": Found 34 lines after match in file.
So there's no ssh or any other complication, just the basic expect buffer of a cat result. Can someone else try this and confirm that it works as expected on their system?

Thanks,

Bret

Replies are listed 'Best First'.
Re^3: Expecting more from expect
by TilRMan (Friar) on Jul 08, 2004 at 23:19 UTC

    My apologies -- I read the OP too hastily.

    Again, will scp do the trick?

    You are trying to use the $after_match to grab everything after a match. This is not the way Expect works. It will only read what it needs in order to match the pattern you specified. You need to match the end of the file and then take everything before the end.

    #untested my $prompt = "my_unique_custom_prompt_aint_it_neat>"; $object->send("export PS1=$prompt\r"); $object->expect(10, $prompt); $object->send("cat file.txt\r"); $object->expect(10, $header); $object->expect(120, $prompt); my $contents = $object->before();