in reply to Re: expect.pm header
in thread expect.pm header

Hello roboticus, I really wanted to have a header but you are right the $system does not have a value assigned to it. Looking at my script how can I get $system to be in my log that corresponds to each server getting the password changed. That is what I am trying to do. Respectfully,

Replies are listed 'Best First'.
Re^3: expect.pm header
by GotToBTru (Prior) on Apr 07, 2015 at 15:09 UTC

    You need to replace $system with a placeholder - it could be the word 'system' - and then, just before you print the header, use s/// to replace the placeholder with the value you want, which will be defined at that time.

    my $header = "\n\n======= system =======\n"; ... sub change_password { my $system = shift; $header =~ s/system/$system/; ...
    Dum Spiro Spero
      Thank you GotToBTru, I am missing the mark I have my script like this now but I still don't see a header in my log file just other information that was a result of the script in debug. For example:
      ^[[01m[root@remotehost ~ ]^[[m # hostname remotehost ^[[01m[root@remotehost ~ ]^[[m # uptime 1:03pm up 9 day(s), 13:47, 3 users, load average: 5.83, 5.33, 5.1 +3 ^[[01m[root@remotehost ~ ]^[[m # passwd amagana New Password: Re-enter new Password: passwd: password successfully changed for amagana ^[[01m[root@remotehost ~ ]^[[m # exit logout $
      My script is current like this now:
      #!/usr/bin/perl -w use warnings; use strict; use Expect; #my $system = shift; my $filename = "/var/tmp/expect_script.log"; my $header = "\n\n======= system =======\n"; my $timeout = 60; my @servers = qw( remotehost ); for my $server (@servers) { # do your thing with $server change_password($server); } sub change_password { my $system = shift; $header =~ s/system/$system/; #my $filename = "/var/tmp/expect_script.log"; my $ssh = Expect->new('ssh amagana@' . $system); $ssh->log_file($filename); $ssh->debug(1); $ssh->expect ( $timeout, [ qr/Password:/], [ qr/Are you sure you want to continue connecting \(yes\/no\)?/] ); if ($ssh->match() =~ m/Are you sure you want to continue connecting \( +yes\/no\)?/ ) { $ssh->send("yes\r"); } elsif ($ssh->match() =~ m/Password:/ ) { $ssh->send("mycurrentpassword\n"); } $ssh->expect(60, '$'); $ssh->send("su - root\n"); $ssh->expect(60, 'Password:'); $ssh->send("rootpassword\n"); $ssh->expect(60, '#'); $ssh->send("hostname\n"); $ssh->expect(60, '#'); $ssh->send("uptime\n"); $ssh->expect(60, '#'); $ssh->send("passwd amagana\n"); $ssh->expect(60, 'New Password:'); $ssh->send("newpassword\n"); $ssh->expect(60, 'Re-enter new Password:'); $ssh->send("newpassword\n"); $ssh->expect(60, '#'); $ssh->send("exit\n"); $ssh->expect(60, '$'); $ssh->send("exit\n"); $ssh->close(); }

        Try inserting
             $ssh->print_log_file($header);
        after
             $ssh->debug(1);