parallel: fixed --results if argument contains \t \0 and /. This may have destroyed default --colsep=\t.

This commit is contained in:
Ole Tange 2012-10-01 11:30:16 +02:00
parent c8051ced91
commit 7a2e3d731b
3 changed files with 14 additions and 5 deletions

View file

@ -74,8 +74,9 @@ if($::opt_skip_first_line) {
if($::opt_header and not $::opt_pipe) { if($::opt_header and not $::opt_pipe) {
my $fh = $fhlist[0]; my $fh = $fhlist[0];
# split with colsep or \t # split with colsep or \t
# TODO should $header force $colsep = \t if undef? # $header force $colsep = \t if undef?
my $delimiter = $::opt_colsep; my $delimiter = $::opt_colsep;
$delimiter ||= '$';
my $id = 1; my $id = 1;
for my $fh (@fhlist) { for my $fh (@fhlist) {
my $line = <$fh>; my $line = <$fh>;
@ -675,7 +676,7 @@ sub parse_options {
if(defined $::opt_tmpdir) { $ENV{'TMPDIR'} = $::opt_tmpdir; } if(defined $::opt_tmpdir) { $ENV{'TMPDIR'} = $::opt_tmpdir; }
if(defined $::opt_help) { die_usage(); } if(defined $::opt_help) { die_usage(); }
if(defined $::opt_colsep) { $Global::trim = 'lr'; } if(defined $::opt_colsep) { $Global::trim = 'lr'; }
if(defined $::opt_header) { $::opt_colsep = defined $::opt_colsep ? $::opt_colsep : "\t"; } # if(defined $::opt_header) { $::opt_colsep = defined $::opt_colsep ? $::opt_colsep : "\t"; }
if(defined $::opt_trim) { $Global::trim = $::opt_trim; } if(defined $::opt_trim) { $Global::trim = $::opt_trim; }
if(defined $::opt_arg_sep) { $Global::arg_sep = $::opt_arg_sep; } if(defined $::opt_arg_sep) { $Global::arg_sep = $::opt_arg_sep; }
if(defined $::opt_arg_file_sep) { $Global::arg_file_sep = $::opt_arg_file_sep; } if(defined $::opt_arg_file_sep) { $Global::arg_file_sep = $::opt_arg_file_sep; }
@ -4227,7 +4228,7 @@ sub args_as_filename {
CORE::push(@res, CORE::push(@res,
$Global::input_source_header{$n+1}, $Global::input_source_header{$n+1},
map { s/\\/\\\\/g; map { s/\\/\\\\/g;
s/\t/\\\t/g; s/\t/\\t/g;
s/\0/\\0/g; s/\0/\\0/g;
s:/:\\_:g; $_ } s:/:\\_:g; $_ }
$rec_ref->[$n]->orig()); $rec_ref->[$n]->orig());

View file

@ -42,10 +42,10 @@ echo "bug #36657: --load does not work with custom ssh";
parallel --load=1000% -S "/usr/bin/ssh localhost" echo ::: OK parallel --load=1000% -S "/usr/bin/ssh localhost" echo ::: OK
echo "bug #34958: --pipe with record size measured in lines"; echo "bug #34958: --pipe with record size measured in lines";
seq 10 | parallel --pipe -L 4 cat\;echo FOO seq 10 | parallel -k --pipe -L 4 cat\;echo FOO | uniq
echo "bug #34958: --pipe with record size measured in lines"; echo "bug #34958: --pipe with record size measured in lines";
seq 10 | parallel --pipe -l 4 cat\;echo FOO seq 10 | parallel -k --pipe -l 4 cat\;echo FOO | uniq
echo "### Test --results"; echo "### Test --results";
mkdir -p /tmp/parallel_results_test; mkdir -p /tmp/parallel_results_test;
@ -72,4 +72,9 @@ echo "### Test --results --header :";
parallel -k --header : --results /tmp/parallel_results_test/testC echo {a} {b} ::: a I II ::: b III IIII parallel -k --header : --results /tmp/parallel_results_test/testC echo {a} {b} ::: a I II ::: b III IIII
ls /tmp/parallel_results_test/testC*; rm /tmp/parallel_results_test/testC* ls /tmp/parallel_results_test/testC*; rm /tmp/parallel_results_test/testC*
echo "### Test --results --header : piped";
mkdir -p /tmp/parallel_results_test;
(echo Col; perl -e 'print "backslash\\tab\tslash/null\0eof\n"') | parallel --header : --result /tmp/parallel_results_test/testF_ true;
ls /tmp/parallel_results_test/testF*; rm /tmp/parallel_results_test/testF*
EOF EOF

View file

@ -181,3 +181,6 @@ II IIII
/tmp/parallel_results_test/testCstdout_a I b IIII /tmp/parallel_results_test/testCstdout_a I b IIII
/tmp/parallel_results_test/testCstdout_a II b III /tmp/parallel_results_test/testCstdout_a II b III
/tmp/parallel_results_test/testCstdout_a II b IIII /tmp/parallel_results_test/testCstdout_a II b IIII
### Test --results --header : piped
/tmp/parallel_results_test/testF_stderr_Col backslash\\tab\tslash\_null\0eof
/tmp/parallel_results_test/testF_stdout_Col backslash\\tab\tslash\_null\0eof