in reply to Error using system() and tar with several options
What you probably should do, for learning purposes of course, is save this script as mytar:
And then see what comes out when you run mytar instead of tar.#!/usr/bin/perl use strict; use warnings; for (0..$#ARGV) { print "$_:[$ARGV[$_]]\n"; }
What you'll find is that "csv --exclude-from=$excludes -f" become one parameter, not individual parameters. However, if you change your system call to be system("mytar czv --exclude-from -f $storageLocation$archiveName $archiveDir"), you'll notice they're separate flags. That's because system (ok, the shell) will split the parameters on spaces if you pass in a single parameter, but not if you pass in multiple parameters. This makes it easy to pass in flags with spaces without having to worry about the shell's quoting rules inside perl's quoting rules.
So, the fix? Keep separate flags separate:
That should help. :-)my @args = ( qw(/bin/tar czv), "--exclude-from=$excludes", qw(-f), $storageLocati +on.$archiveName, $archiveDir );
|
|---|