my $exp = Expect->spawn("su - $username") || die "Cannot spawn su: $!\n"; ####################################### $exp->debug(3); ####################################### $exp->raw_pty(1); my $spawn_ok; $exp->expect($timeout, [ 'Password: \$', sub { my $fh = shift; print $fh "$password\n"; $spawn_ok = "yes"; exp_continue; } ], [ eof => sub { if ($spawn_ok) { die "ERROR: premature EOF in login.\n"; } else { die "ERROR: could not spawn su.\n"; } } ], [ timeout => sub { die "Login process timed out\n"; } ], # ); #$exp->expect($timeout, # [ '-re', qr'[#>:] \$', sub { if($spawn_ok eq "yes") { if($on_off eq "on") { foreach $FILENAME (@list_of_files) { $exp->send("/bin/touch /home/$username/$FILENAME"); if ( $FILENAME eq ".forward") { #.forward must look like \username, "|/usr/bin/vacation username" $set_fwd="\\$username, \"|/usr/bin/vacation $username\""; $exp->send("/bin/echo $set_fwd > /home/$username/$FILENAME"); } if ( $FILENAME eq ".vacation.msg") { $message .= '\n'; $exp->send("/bin/echo $message > /home/$username/$FILENAME"); } $exp->send("/bin/chmod 644 /home/$username/$FILENAME"); $exp->send("/bin/chown $username /home/$username/$FILENAME"); } if($on_off eq "off") { foreach $FILENAME (@list_of_files) { $exp->send("/bin/rm -f /home/$username/$FILENAME"); } } } } } # ], # [ # timeout => # sub { # die "Login process timed out\n"; # } # ], );