As question title stand for system
command, this will answer directly, but the sample command using bash contain only thing that will be simplier in perl only (take a look at other answer using opendir
and -d
in perl).
If you want to use system
(instead of open $cmdHandle,"bash -c ... |"
), the prefered syntax for execution commands like system
or exec
, is to let perl
parsing the command line.
Try this (as you've already done):
perl -e 'system("bash -c \"echo hello world\"")'
hello world
perl -e 'system "bash -c \"echo hello world\"";'
hello world
And now better, same but letting perl
ensure command line parsing, try this:
perl -e 'system "bash","-c","echo hello world";'
hello world
There are clearly 3 argument of system
command:
- bash
- -c
- the script
or little more:
perl -e 'system "bash","-c","echo hello world;date +\"Now it is %T\";";'
hello world
Now it is 11:43:44
as you can see in last purpose, there is no double double-quotes enclosing bash script part of command line.
**Nota: on command line, using perl -e '...'
or perl -e "..."
, it's a little heavy to play with quotes and double-quotes. In a script, you could mix them:
system 'bash','-c','for ((i=10;i--;));do printf "Number: %2d\n" $i;done';
or even:
system 'bash','-c','for ((i=10;i--;));do'."\n".
'printf "Number: %2d\n" $i'."\n".
'done';
Using dots .
for concatening part of (script part) string, there are always 3 arguments.