从perl运行时,将bash脚本的输出记录到日志文件和stdout中

时间:2014-03-17 08:27:01

标签: linux perl bash shell debian

我有perl脚本

perl脚本(install.pl):

use strict; use warnings;
use Term::ANSIColor;
my $logfilename = "install.log";
open LOG,">$logfilename" or die "failed to open log file reason:$!";
sub logMsg
{
    my ($msg) = @_;
    my ($error) = $_[1];
    $msg .= "\n";
    print LOG $msg;
    if( $error ) { print color 'red' ;}
    {print $msg}
    if( $error ) { print color 'reset' ;}   
}
sub lampInstall
{
    logMsg("Installing apache2, php, and mysql db");
    # Install apache2 and mysql:
    my $cmdOutput = `./ubuntu-lamp-install.sh`;
    print LOG "$cmdOutput\n";
}
lampInstall();
close LOG;

bash脚本(ubuntu-lamp-install.sh)

#!/bin/bash
sudo apt-get update
sudo apt-get install ntp
sudo /etc/init.d/ntp start
export DEBIAN_FRONTEND=noninteractive
echo "mysql-server mysql-server/root_password password test" | sudo debconf-set-selections
echo "mysql-server mysql-server/root_password_again password test" | sudo debconf-set-selections
sudo apt-get install -y apache2 php5 libapache2-mod-php5
sudo service apache2 restart
sudo a2enmod ssl

问题在于,当调用install.pl时,它会等待很长时间并且不会提供有关正在安装的内容的任何输出信息。我需要它来更改perl脚本以显示来自bash的输出信息脚本(如果是瞬时更好)以及将输出记录到日志文件中。该脚本由其他人编写,我对perl脚本编写知之甚少。

1 个答案:

答案 0 :(得分:2)

您可以执行类似

的操作
open my $cmdOutut, "-|", "./ubuntu-lamp-install.sh";
while (<$cmdOutput>) {
    print LOG "$_\n";
    print "$_\n";
}

lampInstall()

这是新的lampInstall()

sub lampInstall
{
    logMsg("Installing apache2, php, and mysql db");
    # Install apache2 and mysql:
    open my $cmdOutut, "-|", "./ubuntu-lamp-install.sh";
    while (<$cmdOutput>) {
        print LOG "$_\n";
        print "$_\n";
    }
}
相关问题