I am trying to execute a system command. The problem is that 1) there is a space in the directory name for the directory path, and 2) there is a pipe and a redirection.
I have read that the solution to the first problem is to pass the arguments as an array to system(). But when I try to pass the arguments as an array, I run into the second problem which is that the pipe and redirect do not work when they are passed to system() in the array, apparently because Perl forks a new process and does not have access to shell commands like pipe and redirect. What's the solution?
Script:
my $backup_dir = "/home/username/Ubuntu One"; # dump the database and gzip it my @mysqldump = ("mysqldump","--add-drop-table","-uroot","-ppassword", +"mydatabase","|","gzip","-9c",">","$backup_dir/mydatabase.sql.gz"); system(@mysqldump);
Output:
mysqldump: unknown option '-9'
In reply to System command using array and pipe by civil777
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |