I use a Perl script to configure and spawn a compiled program, that needs a subshell configured a certain way, so I use $returncode = system("ulimit -s unlimited; sg ourgroup 'MyExecutable.exe'");
I want to capture and parse the STDOUT from that, but I need it forked, so that the output can be checked while the job is still running. This question comes close:
How can I send Perl output to a both STDOUT and a variable? The highest-rated answer describes a function called backtick()
that creates a child process, captures STDOUT
, and runs a command in it with exec()
.
But the calls I have require multiple lines to configure the shell. One solution would be to create a disposable shell script:
#disposable.sh #!/bin/sh ulimit -s unlimited sg ourgroup 'MyExecutable.exe'
I could then get what I need either with backtick(disposable.sh)
or open(PROCESS,'disposable.sh|')
.
But I'd really rather not make a scratch file for this. system()
happily accepts multi-line command strings. How can I get exec()
or open()
to do the same?