Hi, I am trying to run the Following as a part of my perl Script
system "/bin/zsh", "$HOME/env/$ENV{DEST_SCRIPT_HOST}/db_silent_install/11gR2-11.2.0.1.0/install.zsh";
when this Command is Executed, the install.zsh creates DB, and It prompts in the shell to run the mentioned Command as root user, and then Press enter,
I want to write this system command in such a way that it executes the install.zsh and once the process is paused, it should hit Enter to move the process Ahead
Thanks
PR
| [reply] [d/l] |
Aah, OK - that helps me understand your problem better.
Basically you want to monitor the output of the installation script, and if it asks for input (or asks to run some commands as root), you want to do that from your Perl script and then tell the other script to continue.
First I would look if that installation script itself can invoke or prepend another command (like sudo ...) in front of the needed root commands instead for automated installation.
If there is no such facility, you can either redirect the output of install.zsh to a file and monitor the file or use IPC::Run3 or Expect to communicate with the installation script.
Personally, I would try the following approach, launching install.zsh in the background having it write to a file but keeping the input to it open:
use File::Tail;
my $logfile = '/tmp/install.zsh.log';
my $child = open my $install_zsh, "| /bin/zsh $HOME/env/$ENV{DEST_SCRI
+PT_HOST}/db_silent_install/11gR2-11.2.0.1.0/install.zsh >$logfile";
# Sleep to give the logfile time to fill
sleep 5;
my $timeout = time + 60;
my $log = File::Tail->new($logfile);
while (defined($line=$log->read)) {
print "$line";
if( $line =~ /root user/ ) {
print "Running magic helper commands as root\n";
system("sudo ...") == 0 or die "$?";
print "Sending ENTER to install script\n";
print $child "\n";
};
}
Update: s/\$file/\$log/, spotted by johngg | [reply] [d/l] [select] |
| [reply] |