http://www.perlmonks.org?node_id=925651


in reply to Re^2: How to call Linux command sequentially
in thread How to call Linux command sequentially

When you call exec a new process is forked and the parent quits, whereas when you call system the parent waits for the system call to complete. Using backticks `` or the qx is similar to a system call but the output is returned to the caller. eg.
$ perl -Mstrict -e 'my @out =qx{ls $ENV{HOME}/tmp}; chomp @out; print join (", " , @out), "\n";' a.out, test.c, test.dat, test.pl
Could you show us how you call the command within your Perl script?

print "Good ",qw(night morning afternoon evening)[(localtime)[2]/6]," fellow monks."

Replies are listed 'Best First'.
Re^4: How to call Linux command sequentially
by mv.ashwin@gmail.com (Novice) on Sep 13, 2011 at 09:22 UTC
    OK there was syntax problem i was able to run the command. But here comes another problem. The first command here creates the an environment, in that environment i need to execute the second command. Here nither system nor exec will do these. Untill I manually exit from environment the second command is not running. Once i exit from environment the second executes. But i need the second command to be executed in environment which was set by first command. Is it possible to do so? Please help!!!!
      You could try something like:
      #!/usr/bin/perl use strict; my $shpid = open( SH, '|-', '/bin/bash' ) or die "Can't launch bash: $ +!\n"; my @command_list = ( "first_command args ...\n", "second_command args ...\n" ... ); for my $cmd ( @command_list ) { print SH $cmd; } print SH "exit\n"; waitpid( $shpid, 0 );
      If the list of commands actually includes things that change the shell environment for subsequent commands, that should work as intended.