parallel: \-quoting replaced with '-quoting.

This commit is contained in:
Ole Tange 2018-07-22 08:58:32 +02:00
parent 628c0029cc
commit 75007fcbbf
48 changed files with 2558 additions and 882 deletions

View file

@ -119,4 +119,7 @@ monitorman:
# If man page changed: open new pdfman # If man page changed: open new pdfman
inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f . | parallel -uj1 'echo {=/\.pod$$/ or skip()=};make -j && sudo make install; pdfman {/.} &' inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f . | parallel -uj1 'echo {=/\.pod$$/ or skip()=};make -j && sudo make install; pdfman {/.} &'
testurls:
grep -h -Po 'https?://[^ $$<>")}]+' src/* | perl -pe 's/(&gt|\{).*//;s/\\//g;s/&amp;/&/g;s/&#.*//;'"s/'.*//" | sort -u | parallel -j0 --tag 'wget -qm -l1 -Q1 {}; echo $$?'
EXTRA_DIST = CITATION CREDITS cc-by-sa.txt fdl.txt EXTRA_DIST = CITATION CREDITS cc-by-sa.txt fdl.txt

View file

@ -867,6 +867,9 @@ monitorman:
# If man page changed: open new pdfman # If man page changed: open new pdfman
inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f . | parallel -uj1 'echo {=/\.pod$$/ or skip()=};make -j && sudo make install; pdfman {/.} &' inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f . | parallel -uj1 'echo {=/\.pod$$/ or skip()=};make -j && sudo make install; pdfman {/.} &'
testurls:
grep -h -Po 'https?://[^ $$<>")}]+' src/* | perl -pe 's/(&gt|\{).*//;s/\\//g;s/&amp;/&/g;s/&#.*//;'"s/'.*//" | sort -u | parallel -j0 --tag 'wget -qm -l1 -Q1 {}; echo $$?'
# Tell versions [3.59,3.63) of GNU make to not export all variables. # Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded. # Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: .NOEXPORT:

12
README
View file

@ -44,9 +44,9 @@ document.
Full installation of GNU Parallel is as simple as: Full installation of GNU Parallel is as simple as:
wget https://ftpmirror.gnu.org/parallel/parallel-20180622.tar.bz2 wget https://ftpmirror.gnu.org/parallel/parallel-20180722.tar.bz2
bzip2 -dc parallel-20180622.tar.bz2 | tar xvf - bzip2 -dc parallel-20180722.tar.bz2 | tar xvf -
cd parallel-20180622 cd parallel-20180722
./configure && make && sudo make install ./configure && make && sudo make install
@ -55,9 +55,9 @@ Full installation of GNU Parallel is as simple as:
If you are not root you can add ~/bin to your path and install in If you are not root you can add ~/bin to your path and install in
~/bin and ~/share: ~/bin and ~/share:
wget https://ftpmirror.gnu.org/parallel/parallel-20180622.tar.bz2 wget https://ftpmirror.gnu.org/parallel/parallel-20180722.tar.bz2
bzip2 -dc parallel-20180622.tar.bz2 | tar xvf - bzip2 -dc parallel-20180722.tar.bz2 | tar xvf -
cd parallel-20180622 cd parallel-20180722
./configure --prefix=$HOME && make && make install ./configure --prefix=$HOME && make && make install
Or if your system lacks 'make' you can simply copy src/parallel Or if your system lacks 'make' you can simply copy src/parallel

View file

@ -1,4 +1,4 @@
AC_INIT([parallel], [20180622], [bug-parallel@gnu.org]) AC_INIT([parallel], [20180722], [bug-parallel@gnu.org])
AM_INIT_AUTOMAKE([-Wall -Werror foreign]) AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_CONFIG_HEADERS([config.h]) AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([ AC_CONFIG_FILES([

View file

@ -141,6 +141,7 @@ git push
git push origin $TAG git push origin $TAG
git push origin $YYYYMMDD git push origin $YYYYMMDD
== Update documentation == == Update documentation ==
Update version number + 1 Update version number + 1
@ -154,6 +155,12 @@ Unmodified beta since last version => production
Unmodified alpha since last version => beta Unmodified alpha since last version => beta
Modified => alpha Modified => alpha
== Check URLs ==
make testurls
== Update Savannah == == Update Savannah ==
file:///home/tange/privat/parallel/doc/release_new_version file:///home/tange/privat/parallel/doc/release_new_version
@ -199,10 +206,11 @@ to:parallel@gnu.org, bug-parallel@gnu.org
stable-bcc: Jesse Alama <jessealama@fastmail.fm> stable-bcc: Jesse Alama <jessealama@fastmail.fm>
Subject: GNU Parallel 20180722 ('?') released <<[stable]>> Subject: GNU Parallel 20180722 ('Crimson Hexagon') released [alpha] <<[stable]>>
GNU Parallel 20180722 ('') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/ GNU Parallel 20180722 ('Crimson Hexagon') [alpha] <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/
This release has signficant changes and is considered alpha quality.
<<No new functionality was introduced so this is a good candidate for a stable release.>> <<No new functionality was introduced so this is a good candidate for a stable release.>>
Quote of the month: Quote of the month:
@ -214,6 +222,8 @@ Quote of the month:
New in this release: New in this release:
* The quoting engine has been changed. Instead of using \-quoting GNU Parallel now uses '-quoting in bash/ash/dash/ksh. This should improve compatibility with different locales. This is a big change causing this release to be alpha quality.
* The CPU calculation has changed. By default GNU Parallel uses the number of CPU threads as the number of CPUs. This can be change to the number of CPU cores or number of CPU sockets with --use-cores-instead-of-threads or --use-sockets-instead-of-threads. * The CPU calculation has changed. By default GNU Parallel uses the number of CPU threads as the number of CPUs. This can be change to the number of CPU cores or number of CPU sockets with --use-cores-instead-of-threads or --use-sockets-instead-of-threads.
* The detected number of sockets, cores, and threads can be shown with --number-of-sockets, --number-of-cores, and --number-of-threads. * The detected number of sockets, cores, and threads can be shown with --number-of-sockets, --number-of-cores, and --number-of-threads.
@ -222,7 +232,9 @@ New in this release:
* GNU Parallel is distributed as part of Snippy https://github.com/tseemann/snippy * GNU Parallel is distributed as part of Snippy https://github.com/tseemann/snippy
https://esgeeks.com/gnu-parallel-ejecutar-comandos-simultaneo-linux/ * GNU Parallel: Ejecutar comandos simultáneamente en Linux https://esgeeks.com/gnu-parallel-ejecutar-comandos-simultaneo-linux/
* Parallel download genomic data with GNU-Parallel https://digibio.blogspot.com/search/label/GNU-Parallel
<<Citation not OK: BAMClipper: removing primers from alignments to minimize false-negative mutations in amplicon next-generation sequencing https://www.nature.com/articles/s41598-017-01703-6>> <<Citation not OK: BAMClipper: removing primers from alignments to minimize false-negative mutations in amplicon next-generation sequencing https://www.nature.com/articles/s41598-017-01703-6>>

View file

@ -349,8 +349,8 @@ _parset_main() {
else else
# $_parset_name does not contain , or space # $_parset_name does not contain , or space
# => $_parset_name is the name of the array to put data into # => $_parset_name is the name of the array to put data into
# Supported in: bash zsh ksh # Supported in: bash zsh ksh mksh
# Arrays do not work in: ash dash # Arrays do not work in: sh ash dash
eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" | eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" |
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )" perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )"
fi fi

View file

@ -340,8 +340,8 @@ _parset_main() {
else else
# $_parset_name does not contain , or space # $_parset_name does not contain , or space
# => $_parset_name is the name of the array to put data into # => $_parset_name is the name of the array to put data into
# Supported in: bash zsh ksh # Supported in: bash zsh ksh mksh
# Arrays do not work in: ash dash # Arrays do not work in: sh ash dash
eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" | eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" |
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )" perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )"
fi fi

View file

@ -24,7 +24,7 @@
use strict; use strict;
use Getopt::Long; use Getopt::Long;
$Global::progname="niceload"; $Global::progname="niceload";
$Global::version = 20180622; $Global::version = 20180722;
Getopt::Long::Configure("bundling","require_order"); Getopt::Long::Configure("bundling","require_order");
get_options_from_array(\@ARGV) || die_usage(); get_options_from_array(\@ARGV) || die_usage();
if($opt::version) { if($opt::version) {

View file

@ -262,7 +262,7 @@ sub pipepart_setup {
@Global::cat_prepends = map { pipe_part_files($_) } @opt::a; @Global::cat_prepends = map { pipe_part_files($_) } @opt::a;
# Unget the empty arg as many times as there are parts # Unget the empty arg as many times as there are parts
$Global::JobQueue->{'commandlinequeue'}{'arg_queue'}->unget( $Global::JobQueue->{'commandlinequeue'}{'arg_queue'}->unget(
map { [Arg->new("\0")] } @Global::cat_prepends map { [Arg->new("\0noarg")] } @Global::cat_prepends
); );
} }
} }
@ -1317,10 +1317,10 @@ sub parse_options {
# Append a dummy empty argument if there are no arguments # Append a dummy empty argument if there are no arguments
# on the command line to avoid reading from STDIN. # on the command line to avoid reading from STDIN.
# arg_sep = random 50 char # arg_sep = random 50 char
# \0 => nothing (not the empty string) # \0noarg => nothing (not the empty string)
$Global::arg_sep = join "", $Global::arg_sep = join "",
map { (0..9,"a".."z","A".."Z")[rand(62)] } (1..50); map { (0..9,"a".."z","A".."Z")[rand(62)] } (1..50);
push @ARGV, $Global::arg_sep, "\0"; push @ARGV, $Global::arg_sep, "\0noarg";
} }
if(defined $opt::tee) { if(defined $opt::tee) {
if(not defined $opt::jobs) { if(not defined $opt::jobs) {
@ -1462,6 +1462,9 @@ sub parse_options {
} }
# Map \001 to \n to make it easer to quote \n in $PARALLEL_ENV # Map \001 to \n to make it easer to quote \n in $PARALLEL_ENV
$penv =~ s/\001/\n/g; $penv =~ s/\001/\n/g;
if($penv =~ /\0/) {
::warning('\0 (NUL) in environment is not supported');
}
$Global::parallel_env = $penv; $Global::parallel_env = $penv;
} }
@ -1538,7 +1541,7 @@ sub check_invalid_option_combinations {
sub init_globals { sub init_globals {
# Defaults: # Defaults:
$Global::version = 20180622; $Global::version = 20180722;
$Global::progname = 'parallel'; $Global::progname = 'parallel';
$Global::infinity = 2**31; $Global::infinity = 2**31;
$Global::debug = 0; $Global::debug = 0;
@ -1609,8 +1612,6 @@ sub init_globals {
$Global::trim = 'n'; $Global::trim = 'n';
$Global::max_jobs_running = 0; $Global::max_jobs_running = 0;
$Global::job_already_run = ''; $Global::job_already_run = '';
# LC_ALL workaround for multibyte chars containing special shell chars
$ENV{'LC_ALL'} = 'C';
$ENV{'TMPDIR'} ||= "/tmp"; $ENV{'TMPDIR'} ||= "/tmp";
if(not $ENV{HOME}) { if(not $ENV{HOME}) {
# $ENV{HOME} is sometimes not set if called from PHP # $ENV{HOME} is sometimes not set if called from PHP
@ -1789,7 +1790,7 @@ sub parse_semaphore {
@opt::a = ("/dev/null"); @opt::a = ("/dev/null");
# Append a dummy empty argument # Append a dummy empty argument
# \0 => nothing (not the empty string) # \0 => nothing (not the empty string)
push(@Global::unget_argv, [Arg->new("\0")]); push(@Global::unget_argv, [Arg->new("\0noarg")]);
$Semaphore::timeout = $opt::semaphoretimeout || 0; $Semaphore::timeout = $opt::semaphoretimeout || 0;
if(defined $opt::semaphorename) { if(defined $opt::semaphorename) {
$Semaphore::name = $opt::semaphorename; $Semaphore::name = $opt::semaphorename;
@ -2266,8 +2267,8 @@ sub shell_quote {
# Output: # Output:
# @shell_quoted_strings = string quoted with \ as needed by the shell # @shell_quoted_strings = string quoted with \ as needed by the shell
return wantarray ? return wantarray ?
(map { shell_quote_scalar($_) } @_) (map { Q($_) } @_)
: (join" ",map { shell_quote_scalar($_) } @_); : (join" ",map { Q($_) } @_);
} }
sub shell_quote_scalar_rc { sub shell_quote_scalar_rc {
@ -2310,27 +2311,20 @@ sub shell_quote_scalar_csh {
} }
sub shell_quote_scalar_default { sub shell_quote_scalar_default {
# Quote for other shells # Quote for other shells (Bourne compatibles)
my $a = $_[0]; my ($par) = $_[0];
if(defined $a) { if($par =~ /[^-_.+a-z0-9\/]/i) {
# zsh wants '=' quoted $par =~ s/'/'"'"'/g; # "-quote single quotes
# Solaris sh wants ^ quoted. $par = "'$par'"; # '-quote entire string
# $a =~ s/([\002-\011\013-\032\\\#\?\`\(\)\{\}\[\]\^\*\>\<\~\|\; \"\!\$\&\'\202-\377])/\\$1/g; $par =~ s/^''|''$//g; # Remove unneeded '' at ends
# This is 1% faster than the above return $par;
if(($a =~ s/[\002-\011\013-\032\\\#\?\`\(\)\{\}\[\]\^\*\<\=\>\~\|\; \"\!\$\&\'\202-\377]/\\$&/go) } elsif ($par eq "") {
+ return "''";
# quote newline as '\n' } else {
($a =~ s/[\n]/'\n'/go)) { # No quoting needed
# A string was replaced return $par;
# No need to test for "" or \0
} elsif($a eq "") {
$a = "''";
} elsif($a eq "\0") {
$a = "";
} }
} }
return $a;
}
sub shell_quote_scalar { sub shell_quote_scalar {
# Quote the string so the shell will not expand any special chars # Quote the string so the shell will not expand any special chars
@ -2356,6 +2350,12 @@ sub shell_quote_scalar {
return shell_quote_scalar(@_); return shell_quote_scalar(@_);
} }
sub Q {
# Q alias for ::shell_quote_scalar
*Q = \&::shell_quote_scalar;
return Q(@_);
}
sub shell_quote_file { sub shell_quote_file {
# Quote the string so shell will not expand any special chars # Quote the string so shell will not expand any special chars
# and prepend ./ if needed # and prepend ./ if needed
@ -2363,7 +2363,7 @@ sub shell_quote_file {
# $filename = filename to be shell quoted # $filename = filename to be shell quoted
# Returns: # Returns:
# $quoted_filename = filename quoted with \ and ./ if needed # $quoted_filename = filename quoted with \ and ./ if needed
my $a = shell_quote_scalar(shift); my $a = shift;
if(defined $a) { if(defined $a) {
if($a =~ m:^/: or $a =~ m:^\./:) { if($a =~ m:^/: or $a =~ m:^\./:) {
# /abs/path or ./rel/path => skip # /abs/path or ./rel/path => skip
@ -2372,7 +2372,7 @@ sub shell_quote_file {
$a = "./".$a; $a = "./".$a;
} }
} }
return $a; return ::Q($a);
} }
sub shell_words { sub shell_words {
@ -2397,6 +2397,12 @@ sub perl_quote_scalar {
return $a; return $a;
} }
sub pQ {
# pQ alias for ::perl_quote_scalar
*pQ = \&::perl_quote_scalar;
return pQ(@_);
}
sub unquote_printf { sub unquote_printf {
# Convert \t \n \r \000 \0 # Convert \t \n \r \000 \0
$_ = shift; $_ = shift;
@ -2910,7 +2916,7 @@ sub drain_job_queue {
# Replace --sql/--sqlandworker with --sqlworker # Replace --sql/--sqlandworker with --sqlworker
my @ARGV = map { s/^--sql(andworker)?$/--sqlworker/; $_ } @Global::options_in_argv; my @ARGV = map { s/^--sql(andworker)?$/--sqlworker/; $_ } @Global::options_in_argv;
# exec the --sqlworker # exec the --sqlworker
exec($0,::shell_quote(@ARGV),@command); exec($0,@ARGV,@command);
} }
} }
} }
@ -3629,7 +3635,7 @@ sub parse_host_filtering {
my (%nsockets, %ncores, %nthreads, %time_to_login, %maxlen, %echo, my (%nsockets, %ncores, %nthreads, %time_to_login, %maxlen, %echo,
@down_hosts); @down_hosts);
for (@_) { for (@_) {
::debug("init",$_); ::debug("init","Read: ",$_);
chomp; chomp;
my @col = split /\t/, $_; my @col = split /\t/, $_;
if($col[0] =~ /^parallel: Warning:/) { if($col[0] =~ /^parallel: Warning:/) {
@ -3645,7 +3651,7 @@ sub parse_host_filtering {
next; next;
} }
# Get server from: eval true server\; # Get server from: eval true server\;
$col[8] =~ /eval true..([^;]+).;/ or $col[8] =~ /eval .?true.?\s([^\;]+);/ or
::die_bug("col8 does not contain host: $col[8]"); ::die_bug("col8 does not contain host: $col[8]");
my $host = $1; my $host = $1;
$host =~ tr/\\//d; $host =~ tr/\\//d;
@ -3776,12 +3782,13 @@ sub parallelized_host_filtering {
} }
close $in; close $in;
for(<$host_fh>) { for(<$host_fh>) {
if(/\'$/) { # TODO incompatible with '-quoting. Needs to be fixed differently
# if last char = ' then append next line #if(/\'$/) {
# This may be due to quoting of \n in environment var # # if last char = ' then append next line
$prepend .= $_; # # This may be due to quoting of \n in environment var
next; # $prepend .= $_;
} # next;
#}
$_ = $prepend . $_; $_ = $prepend . $_;
$prepend = ""; $prepend = "";
push @out, $_; push @out, $_;
@ -8276,7 +8283,7 @@ sub sshlogin_wrap {
$wd =~ s:^([^/]):$ENV{'HOME'}/$1:; $wd =~ s:^([^/]):$ENV{'HOME'}/$1:;
} }
::mkdir_or_die($wd); ::mkdir_or_die($wd);
$command = "cd ".::shell_quote_scalar($wd)." || exit 255; ".$command; $command = "cd ".::Q($wd)." || exit 255; ".$command;
} }
if(@opt::env) { if(@opt::env) {
# Prepend with environment setter, which sets functions in zsh # Prepend with environment setter, which sets functions in zsh
@ -8302,7 +8309,7 @@ sub sshlogin_wrap {
my $pwd = ""; my $pwd = "";
if($opt::workdir) { if($opt::workdir) {
# Create remote workdir if needed. Then cd to it. # Create remote workdir if needed. Then cd to it.
my $wd = $self->workdir(); my $wd = ::pQ($self->workdir());
$pwd = qq{system("mkdir","-p","--","$wd"); chdir "$wd" ||}. $pwd = qq{system("mkdir","-p","--","$wd"); chdir "$wd" ||}.
qq{print(STDERR "parallel: Cannot chdir to $wd\\n") && exit 255;}; qq{print(STDERR "parallel: Cannot chdir to $wd\\n") && exit 255;};
} }
@ -8560,7 +8567,7 @@ sub workdir {
} else { } else {
$workdir = "."; $workdir = ".";
} }
$self->{'workdir'} = ::shell_quote_scalar($workdir); $self->{'workdir'} = $workdir;
} }
return $self->{'workdir'}; return $self->{'workdir'};
} }
@ -9974,55 +9981,6 @@ sub replaced {
return $self->{'replaced'}; return $self->{'replaced'};
} }
{
my @target;
my $context_replace;
my $perl_expressions_as_re;
my @arg;
my %words_with_rpl_strings;
sub fish_out_words_with_rpl_strings {
if(not $words_with_rpl_strings{$context_replace,@target}) {
my %word;
for (@target) {
my $tt = $_;
::debug("replace", "Target: $tt");
# Command line template:
# a{1}b{}c{}d
# becomes:
# a{=1 $_=$_ =}b{= $_=$_ =}c{= $_=$_ =}d
# becomes:
# a\257<1 $_=$_ \257>b\257< $_=$_ \257>c\257< $_=$_ \257>d
# Input A B C (no context) becomes:
# A B C => aAbA B CcA B Cd
# Input A B C (context -X) becomes:
# A B C => aAbAcAd aAbBcBd aAbCcCd
if($context_replace) {
while($tt =~ s/([^\s\257]* # before {=
(?:
\257< # {=
(?: [^\257]*|[\257][^<>] )* # The perl expression
\257> # =}
[^\s\257]* # after =}
)+)/ /xs) {
# $1 = pre \257< perlexpr \257> post
$word{"$1"} ||= 1;
}
} else {
while($tt =~ s/( \257<(?: # {=
[^\257]*|[\257][^<>] )* # not \257< or \257>
\257> ) # =}
//xs) {
# $1 = \257< perlexpr \257>
$word{$1} ||= 1;
}
}
}
@{$words_with_rpl_strings{$context_replace,@target}} = keys %word
}
return @{$words_with_rpl_strings{$context_replace,@target}};
}
sub replace_placeholders { sub replace_placeholders {
# Replace foo{}bar with fooargbar # Replace foo{}bar with fooargbar
# Uses: # Uses:
@ -10038,14 +9996,37 @@ sub replaced {
my $quote = shift; my $quote = shift;
my $quote_arg = shift; my $quote_arg = shift;
my %replace; my %replace;
# -X = context replace (fish_out_words_with_rpl_strings)
$context_replace = $self->{'context_replace'}; # Token description:
@target = @$targetref; # \0spc = unquoted space
::debug("replace", "Replace @target\n"); # \0end = last token element
if(not @target) { # \0ign = dummy token to be ignored
# @target is empty: Return empty array # \257<...\257> = replacement expression
return @target; # " " = quoted space, that splits -X group
# text = normal text - possibly part of -X group
my $spacer = 0;
my @tokens = grep { length $_ > 0 } map {
if(/^\257<|^ $/) {
# \257<...\257> or space
$_
} else {
# Split each space into a token
split /(?= )|(?<= )/
} }
}
# Split \257< ... \257> into own token
map { split /(?=\257<)|(?<=\257>)/ }
# Insert "\0spc" between every element
# This space should never be quoted
map { $spacer++ ? ("\0spc",$_) : $_ }
map { $_ eq "" ? "\0empty" : $_ }
@$targetref;
if(not @tokens) {
# @tokens is empty: Return empty array
return @tokens;
}
::debug("replace", "Tokens ".join":",@tokens,"\n");
# Make it possible to use $arg[2] in {= =} # Make it possible to use $arg[2] in {= =}
*Arg::arg = $self->{'arg_list_flat_orig'}; *Arg::arg = $self->{'arg_list_flat_orig'};
# Flat list: # Flat list:
@ -10061,21 +10042,27 @@ sub replaced {
# $self is actually a CommandLine-object, # $self is actually a CommandLine-object,
# but it looks nice to be able to say {= $job->slot() =} # but it looks nice to be able to say {= $job->slot() =}
my $job = $self; my $job = $self;
$perl_expressions_as_re = # @replaced = tokens with \257< \257> replaced
join("|", map {s/^-?\d+//; "\Q$_\E"} keys %{$self->{'replacecount'}}); my @replaced;
# Fish out the words that have replacement strings in them if($self->{'context_replace'}) {
for my $word (fish_out_words_with_rpl_strings()) { my @ctxgroup;
# word = AB \257< perlexpr \257> CD \257< perlexpr \257> EF for my $t (@tokens,"\0end") {
::debug("replace", "Replacing in $word\n"); # \0end = last token was end of tokens.
my $normal_replace; if($t eq " " or $t eq "\0end" or $t eq "\0spc") {
# Context group complete: Replace in it
# for each arg: if(grep { /^\257</ } @ctxgroup) {
# replace replacement strings with replacement in the word value # Context group contains a replacement string:
# push to replace word value # Copy once per arg
my $space = "\0ign";
for my $arg (@$argref) { for my $arg (@$argref) {
my $val = $word; my $normal_replace;
# Replace {= perl expr =} with value for each arg # Push output
$val =~ s{\257<(-?\d+)?($perl_expressions_as_re)\257>} # Put unquoted space before each context group
# except the first
CORE::push @replaced, $space, map {
$a = $_;
$a =~
s{\257<(-?\d+)?(.*)\257>}
{ {
if($1) { if($1) {
# Positional replace # Positional replace
@ -10089,48 +10076,95 @@ sub replaced {
$normal_replace ||= 1; $normal_replace ||= 1;
($arg ? $arg->replace($2,$quote_arg,$self) : ""); ($arg ? $arg->replace($2,$quote_arg,$self) : "");
} }
}gxe; }sgxe;
if($quote) { $a
CORE::push(@{$replace{::shell_quote_scalar($word)}}, } @ctxgroup;
::shell_quote_scalar($val));
} else {
CORE::push(@{$replace{$word}}, $val);
}
# No normal replacements => only run once
$normal_replace or last; $normal_replace or last;
$space = "\0spc";
}
} else {
# Context group has no a replacement string: Copy it once
CORE::push @replaced, @ctxgroup;
}
# New context group
@ctxgroup=();
}
if($t eq "\0spc") {
CORE::push @replaced,$t;
} else {
CORE::push @ctxgroup,$t;
}
}
} else {
# @group = @token
# Replace in group
# Push output
# repquote = no if {} first on line, no if $quote, yes otherwise
for my $t (@tokens) {
if($t =~ /^\257</) {
my $space = "\0ign";
for my $arg (@$argref) {
my $normal_replace;
$a = $t;
$a =~
s{\257<(-?\d+)?(.*)\257>}
{
if($1) {
# Positional replace
# Find the relevant arg and replace it
($argref->[$1 > 0 ? $1-1 : $n+$1] ? # If defined: replace
$argref->[$1 > 0 ? $1-1 : $n+$1]->
replace($2,$quote_arg,$self)
: "");
} else {
# Normal replace
$normal_replace ||= 1;
($arg ? $arg->replace($2,$quote_arg,$self) : "");
}
}sgxe;
CORE::push @replaced, $space, $a;
$normal_replace or last;
$space = "\0spc";
}
} else {
# No replacement
CORE::push @replaced, $t;
}
} }
} }
*Arg::arg = []; *Arg::arg = [];
if($quote) { ::debug("replace","Replaced: ".join":",@replaced,"\n");
@target = ::shell_quote(@target);
}
if(%replace) {
# Substitute the replace strings with the replacement values
# Must be sorted by length if a short word is a substring of a long word
my $regexp = join('|', map { my $s = $_; $s =~ s/(\W)/\\$1/g; $s }
sort { length $b <=> length $a } keys %replace);
for(@target) {
s/($regexp)/join(" ",@{$replace{$1}})/ge;
}
}
if($Global::escape_string_present) { if($Global::escape_string_present) {
# Command line contains \257: Unescape it \257\256 => \257 # Command line contains \257: Unescape it \257\256 => \257
# If a replacement resulted in \257\256 # If a replacement resulted in \257\256
# it will have been escaped into \\\257\\\\256 # it will have been escaped into \\\257\\\\256
# and will not be matched below # and will not be matched below
for(@target) { for(@replaced) {
s/\257\256/\257/g; s/\257\256/\257/g;
} }
if($opt::q) { }
# \257 will be quoted too much
for(@target) { # Put tokens into groups that may be quoted.
s/\\\257\\\256/\\\257/g; my @quotegroup;
my @quoted;
for (map { $_ eq "\0empty" ? "" : $_ }
grep { $_ ne "\0ign" }
grep { $_ !~ /\0noarg/ }
@replaced, "\0end") {
if($_ eq "\0spc" or $_ eq "\0end") {
# \0spc splits quotable groups
if($quote) {
CORE::push @quoted, ::shell_quote_scalar(join"",@quotegroup);
} else {
CORE::push @quoted, join"",@quotegroup;
}
@quotegroup = ();
} else {
CORE::push @quotegroup, $_;
} }
} }
} ::debug("replace","Quoted: ".join":",@quoted,"\n");
::debug("replace", "Return @target\n"); return wantarray ? @quoted : "@quoted";
return wantarray ? @target : "@target";
}
} }
sub skip { sub skip {
@ -10672,17 +10706,23 @@ sub get {
my $ret = $self->{'arg_sub_queue'}->get(); my $ret = $self->{'arg_sub_queue'}->get();
if($ret) { if($ret) {
if(grep { index($_->orig(),"\0") > 0 } @$ret) { if(grep { index($_->orig(),"\0") > 0 } @$ret) {
# Allow for \0 in position 0 because GNU Parallel uses "\0" # Allow for \0 in position 0 because GNU Parallel uses "\0noarg"
# to mean no-string # to mean no-string
::warning("a NUL character occurred in the input.", ::warning("A NUL character in the input was replaced with \\0.",
"It cannot be passed through in the argument list.", "NUL cannot be passed through in the argument list.",
"Did you mean to use the --null option?"); "Did you mean to use the --null option?");
for(grep { index($_->orig(),"\0") > 0 } @$ret) {
# Replace \0 with \\0
my $a = $_->orig();
$a =~ s/\0/\\0/g;
$_->set_orig($a);
}
} }
if(defined $Global::max_number_of_args if(defined $Global::max_number_of_args
and $Global::max_number_of_args == 0) { and $Global::max_number_of_args == 0) {
::debug("run", "Read 1 but return 0 args\n"); ::debug("run", "Read 1 but return 0 args\n");
# \0 => nothing (not the empty string) # \0noarg => nothing (not the empty string)
map { $_->set_orig("\0"); } @$ret; map { $_->set_orig("\0noarg"); } @$ret;
} }
# Flush cached computed replacements in Arg-objects # Flush cached computed replacements in Arg-objects
# To fix: parallel --bar echo {%} ::: a b c ::: d e f # To fix: parallel --bar echo {%} ::: a b c ::: d e f
@ -11471,7 +11511,7 @@ sub parse_dburl {
my %options = (); my %options = ();
# sql:mysql://[[user][:password]@][host][:port]/[database[/table][?query]] # sql:mysql://[[user][:password]@][host][:port]/[database[/table][?query]]
if($url=~m!(?:sql:)? # You can prefix with 'sql:' if($url=~m!^(?:sql:)? # You can prefix with 'sql:'
((?:oracle|ora|mysql|pg|postgres|postgresql)(?:s|ssl|)| ((?:oracle|ora|mysql|pg|postgres|postgresql)(?:s|ssl|)|
(?:sqlite|sqlite2|sqlite3|csv)):// # Databasedriver ($1) (?:sqlite|sqlite2|sqlite3|csv)):// # Databasedriver ($1)
(?: (?:
@ -11497,7 +11537,7 @@ sub parse_dburl {
\? \?
(.*)? # Query ($8) (.*)? # Query ($8)
)? )?
!ix) { $!ix) {
$options{databasedriver} = ::undef_if_empty(lc(uri_unescape($1))); $options{databasedriver} = ::undef_if_empty(lc(uri_unescape($1)));
$options{user} = ::undef_if_empty(uri_unescape($2)); $options{user} = ::undef_if_empty(uri_unescape($2));
$options{password} = ::undef_if_empty(uri_unescape($3)); $options{password} = ::undef_if_empty(uri_unescape($3));

View file

@ -409,7 +409,7 @@ there is no data.
=item --tmux =item --tmux
<<TODO Fixup>> <<TODO Fixup with '-quoting>>
mkfifo /tmp/tmx3cMEV && mkfifo /tmp/tmx3cMEV &&
sh -c 'tmux -S /tmp/tmsaKpv1 new-session -s p334310 -d "sleep .2" >/dev/null 2>&1'; sh -c 'tmux -S /tmp/tmsaKpv1 new-session -s p334310 -d "sleep .2" >/dev/null 2>&1';
tmux -S /tmp/tmsaKpv1 new-window -t p334310 -n wc\ 10 \(wc\ 10\)\;\ perl\ -e\ \'while\(\$t++\<3\)\{\ print\ \$ARGV\[0\],\"\\n\"\ \}\'\ \$\?h/\$status\ \>\>\ /tmp/tmx3cMEV\&echo\ wc\\\ 10\;\ echo\ \Job\ finished\ at:\ \`date\`\;sleep\ 10; tmux -S /tmp/tmsaKpv1 new-window -t p334310 -n wc\ 10 \(wc\ 10\)\;\ perl\ -e\ \'while\(\$t++\<3\)\{\ print\ \$ARGV\[0\],\"\\n\"\ \}\'\ \$\?h/\$status\ \>\>\ /tmp/tmx3cMEV\&echo\ wc\\\ 10\;\ echo\ \Job\ finished\ at:\ \`date\`\;sleep\ 10;
@ -792,16 +792,11 @@ you do not see the whole picture.
=head2 Quoting =head2 Quoting
Quoting depends on the shell. For most shells \ is used for all Quoting depends on the shell. For most shells '-quoting is used for
special chars and ' is used for newline. Whether a char is special strings containing special characters.
depends on the shell and the context. Luckily quoting a bit too many
chars does not break things.
It is fast, but has the distinct disadvantage that if a string needs For B<tcsh>/B<csh> newline is quoted as \ followed by newline. Other
to be quoted multiple times, the \'s double every time - increasing special characters are also \-quoted.
the string length exponentially.
For B<tcsh>/B<csh> newline is quoted as \ followed by newline.
For B<rc> everything is quoted using '. For B<rc> everything is quoted using '.

View file

@ -576,7 +576,7 @@ $Global::Initfile && unlink $Global::Initfile;
exit ($err); exit ($err);
sub parse_options { sub parse_options {
$Global::version = 20180622; $Global::version = 20180722;
$Global::progname = 'sql'; $Global::progname = 'sql';
# This must be done first as this may exec myself # This must be done first as this may exec myself

View file

@ -32,6 +32,12 @@ local: testlocal
testlocal: ../src/parallel tests-to-run/*local* wanted-results/*local* prereqlocal installparallel testlocal: ../src/parallel tests-to-run/*local* wanted-results/*local* prereqlocal installparallel
time bash Start.sh local mem time bash Start.sh local mem
short: testlocalshort
true
testlocalshort: ../src/parallel tests-to-run/*local* wanted-results/*local* prereqlocal installparallel
time bash Start.sh local mem'|'100s
prereqlocal: installparallel prereqlocal: installparallel
tcsh -c echo tcsh installed || (echo tcsh is required for testsuite; /bin/false) tcsh -c echo tcsh installed || (echo tcsh is required for testsuite; /bin/false)
seq 1 2 >/dev/null || (echo seq is required for testsuite; /bin/false) seq 1 2 >/dev/null || (echo seq is required for testsuite; /bin/false)

View file

@ -827,6 +827,7 @@ par_pipe_recend() {
par_perlexpr_with_newline() { par_perlexpr_with_newline() {
echo 'Perl expression spanning 2 lines' echo 'Perl expression spanning 2 lines'
mkdir -p tmp
cd tmp cd tmp
touch "Dad's \"famous\" 1' pizza" touch "Dad's \"famous\" 1' pizza"
# Important with newline in perl expression: # Important with newline in perl expression:

View file

@ -16,7 +16,7 @@ par_exit_code() {
# Runs command in given shell via Perl's open3 # Runs command in given shell via Perl's open3
shell="$1" shell="$1"
prg="$2" prg="$2"
perl -MIPC::Open3 -e 'open3($a,$b,$c,"'$shell'","-c","'"$prg"'"); wait; print $?>>8,"\n"' perl -MIPC::Open3 -e 'open3($a,$b,$c,"'$shell'","-c",'"$prg"'); wait; print $?>>8,"\n"'
} }
export -f in_shell_run_command export -f in_shell_run_command

View file

@ -314,6 +314,31 @@ par_retries_all_fail() {
parallel -k -j0 --retries 2 --timeout 0.1 'echo {}; sleep {}; false' 2>/dev/null parallel -k -j0 --retries 2 --timeout 0.1 'echo {}; sleep {}; false' 2>/dev/null
} }
par_sockets_cores_threads() {
echo '### Test --number-of-sockets/cores/threads'
parallel --number-of-sockets
parallel --number-of-cores
parallel --number-of-threads
parallel --number-of-cpus
echo '### Test --use-sockets-instead-of-threads'
(seq 1 4 |
stdout parallel --use-sockets-instead-of-threads -j100% sleep) &&
echo sockets done &
(seq 1 4 | stdout parallel -j100% sleep) && echo threads done &
wait
echo 'Threads should complete first on machines with less than 8 sockets'
}
par_long_line_remote() {
echo '### Deal with long command lines on remote servers'
perl -e "print(((\"'\"x5000).\"\\n\")x6)" |
parallel -j1 -S lo -N 10000 echo {} |wc
perl -e 'print((("\$"x5000)."\n")x50)' |
parallel -j1 -S lo -N 10000 echo {} |wc
}
export -f $(compgen -A function | grep par_) export -f $(compgen -A function | grep par_)
compgen -A function | grep par_ | sort | compgen -A function | grep par_ | sort |
parallel --joblog /tmp/jl-`basename $0` -j10 --tag -k '{} 2>&1' parallel --joblog /tmp/jl-`basename $0` -j10 --tag -k '{} 2>&1'

View file

@ -8,113 +8,114 @@ export PG=pg://`whoami`:`whoami`@lo/`whoami`
export MYSQL=mysql://`whoami`:`whoami`@lo/`whoami` export MYSQL=mysql://`whoami`:`whoami`@lo/`whoami`
export DEBUG=false export DEBUG=false
rm /run/shm/parallel.db
p_showsqlresult() {
SERVERURL=$1
TABLE=$2
sql $SERVERURL "select Host,Command,V1,V2,Stdout,Stderr from $TABLE order by seq;"
}
p_wrapper() {
INNER=$1
SERVERURL=$(eval echo $2)
TABLE=TBL$RANDOM
DBURL=$SERVERURL/$TABLE
T1=$(tempfile)
T2=$(tempfile)
eval "$INNER"
echo Exit=$?
wait
echo Exit=$?
$DEBUG && sort -u $T1 $T2;
rm $T1 $T2
p_showsqlresult $SERVERURL $TABLE
$DEBUG || sql $SERVERURL "drop table $TABLE;" >/dev/null 2>/dev/null
}
p_template() {
(sleep 4;
parallel --sqlworker $DBURL "$@" sleep .3\;echo >$T1) &
parallel --sqlandworker $DBURL "$@" sleep .3\;echo ::: {1..5} ::: {a..e} >$T2;
}
par_sqlandworker() {
p_template
}
par_sqlandworker_lo() {
p_template -S lo
}
par_sqlandworker_results() {
p_template --results /tmp/out--sql
}
par_sqlandworker_linebuffer() {
p_template --linebuffer
}
par_sqlandworker_tag() {
p_template --tag
}
par_sqlandworker_linebuffer_tag() {
p_template --linebuffer --tag
}
par_sqlandworker_compress_linebuffer_tag() {
p_template --compress --linebuffer --tag
}
par_sqlandworker_unbuffer() {
p_template -u
}
par_sqlandworker_total_jobs() {
p_template echo {#} of '{=1 $_=total_jobs(); =};'
}
par_append() {
parallel --sqlmaster $DBURL sleep .3\;echo ::: {1..5} ::: {a..e} >$T2;
parallel --sqlmaster +$DBURL sleep .3\;echo ::: {11..15} ::: {A..E} >>$T2;
parallel --sqlworker $DBURL sleep .3\;echo >$T1
}
par_shuf() {
MD5=$(echo $SERVERURL | md5sum | perl -pe 's/(...).*/$1/')
T=/tmp/parallel-bug49791-$MD5
[ -e $T ] && rm -rf $T
export PARALLEL="--shuf --result $T"
parallel --sqlandworker $DBURL sleep .3\;echo \
::: {1..5} ::: {a..e} >$T2;
parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
unset PARALLEL
wait;
# Did it compute correctly?
cat $T/1/*/*/*/stdout
# Did it shuffle
SHUF=$(sql $SERVERURL "select Host,Command,V1,V2,Stdout,Stderr from $TABLE order by seq;")
export PARALLEL="--result $T"
parallel --sqlandworker $DBURL sleep .3\;echo \
::: {1..5} ::: {a..e} >$T2;
parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
unset PARALLEL
wait;
NOSHUF=$(sql $SERVERURL "select Host,Command,V1,V2,Stdout,Stderr from $TABLE order by seq;")
DIFFSIZE=$(diff <(echo "$SHUF") <(echo "$NOSHUF") | wc -c)
if [ $DIFFSIZE -gt 2500 ]; then
echo OK: Diff bigger than 2500 char
fi
[ -e $T ] && rm -rf $T
touch $T1
}
#p_showsqlresult() {
# SERVERURL=$1
# TABLE=$2
# sql $SERVERURL "select Host,Command,V1,V2,Stdout,Stderr from $TABLE order by seq;"
#}
#
#p_wrapper() {
# INNER=$1
# SERVERURL=$(eval echo $2)
# TABLE=TBL$RANDOM
# DBURL=$SERVERURL/$TABLE
# T1=$(tempfile)
# T2=$(tempfile)
# eval "$INNER"
# echo Exit=$?
# wait
# echo Exit=$?
# $DEBUG && sort -u $T1 $T2;
# rm $T1 $T2
# p_showsqlresult $SERVERURL $TABLE
# $DEBUG || sql $SERVERURL "drop table $TABLE;" >/dev/null 2>/dev/null
#}
#
#p_template() {
# (sleep 2;
# parallel --sqlworker $DBURL "$@" sleep .3\;echo >$T1) &
# parallel --sqlandworker $DBURL "$@" sleep .3\;echo ::: {1..5} ::: {a..e} >$T2;
#}
#
#par_sqlandworker() {
# p_template
#}
#
#par_sqlandworker_lo() {
# p_template -S lo
#}
#
#par_sqlandworker_results() {
# p_template --results /tmp/out--sql
#}
#
#par_sqlandworker_linebuffer() {
# p_template --linebuffer
#}
#
#par_sqlandworker_tag() {
# p_template --tag
#}
#
#par_sqlandworker_linebuffer_tag() {
# p_template --linebuffer --tag
#}
#
#par_sqlandworker_compress_linebuffer_tag() {
# p_template --compress --linebuffer --tag
#}
#
#par_sqlandworker_unbuffer() {
# p_template -u
#}
#
#par_sqlandworker_total_jobs() {
# p_template echo {#} of '{=1 $_=total_jobs(); =};'
#}
#
#par_append() {
# parallel --sqlmaster $DBURL sleep .3\;echo ::: {1..5} ::: {a..e} >$T2;
# parallel --sqlmaster +$DBURL sleep .3\;echo ::: {11..15} ::: {A..E} >>$T2;
# parallel --sqlworker $DBURL sleep .3\;echo >$T1
#}
#
#par_shuf() {
# MD5=$(echo $SERVERURL | md5sum | perl -pe 's/(...).*/$1/')
# T=/tmp/parallel-bug49791-$MD5
# [ -e $T ] && rm -rf $T
# export PARALLEL="--shuf --result $T"
# parallel --sqlandworker $DBURL sleep .3\;echo \
# ::: {1..5} ::: {a..e} >$T2;
# parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
# parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
# parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
# parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
# unset PARALLEL
# wait;
# # Did it compute correctly?
# cat $T/1/*/*/*/stdout
# # Did it shuffle
# SHUF=$(sql $SERVERURL "select Host,Command,V1,V2,Stdout,Stderr from $TABLE order by seq;")
# export PARALLEL="--result $T"
# parallel --sqlandworker $DBURL sleep .3\;echo \
# ::: {1..5} ::: {a..e} >$T2;
# parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
# parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
# parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
# parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
# unset PARALLEL
# wait;
# NOSHUF=$(sql $SERVERURL "select Host,Command,V1,V2,Stdout,Stderr from $TABLE order by seq;")
# DIFFSIZE=$(diff <(echo "$SHUF") <(echo "$NOSHUF") | wc -c)
# if [ $DIFFSIZE -gt 2500 ]; then
# echo OK: Diff bigger than 2500 char
# fi
# [ -e $T ] && rm -rf $T
# touch $T1
#}
#
par_empty() { par_empty() {
true; true;
} }
@ -123,4 +124,4 @@ export -f $(compgen -A function | egrep 'p_|par_')
# Tested that -j0 in parallel is fastest (up to 15 jobs) # Tested that -j0 in parallel is fastest (up to 15 jobs)
compgen -A function | grep par_ | sort | compgen -A function | grep par_ | sort |
stdout parallel -vj5 -k --tag --joblog /tmp/jl-`basename $0` p_wrapper \ stdout parallel -vj5 -k --tag --joblog /tmp/jl-`basename $0` p_wrapper \
:::: - ::: \$MYSQL \$PG \$SQLITE :::: - ::: \$MYSQL \$PG \$SQLITE | perl -pe 's/tbl\d+/TBL99999/gi'

View file

@ -31,9 +31,6 @@ echo '### bug #41805: Idea: propagate --env for parallel --number-of-cores'
FOO=test_csh_filter parallel --filter-hosts --env FOO,HOME -S csh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME' FOO=test_csh_filter parallel --filter-hosts --env FOO,HOME -S csh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME'
echo '** bug #41805 done' echo '** bug #41805 done'
echo '### Deal with long command lines on remote servers'
perl -e 'print((("\""x5000)."\n")x26)' | parallel -j1 -S lo -N 10000 echo {} |wc
echo '### Test bug #34241: --pipe should not spawn unneeded processes' echo '### Test bug #34241: --pipe should not spawn unneeded processes'
seq 5 | ssh csh@lo parallel -k --block 5 --pipe -j10 cat\\\;echo Block_end seq 5 | ssh csh@lo parallel -k --block 5 --pipe -j10 cat\\\;echo Block_end
@ -140,7 +137,7 @@ echo '### bug #46519: --onall ignores --transfer'
echo '### Test --nice remote' echo '### Test --nice remote'
stdout parallel --nice 1 -S lo -vv 'PAR=a bash -c "echo \$PAR {}"' ::: b | stdout parallel --nice 1 -S lo -vv 'PAR=a bash -c "echo \$PAR {}"' ::: b |
perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-z/\\+=0-9]{500,}:base64:i;' perl -pe 's/\S*parallel-server\S*/one-server/;s:="[0-9]+":="XXXXX":i;'
echo '**' echo '**'

View file

@ -347,6 +347,8 @@ par_ksh_man() {
env_parallel -k --env myarray echo '"${myarray[{}]}"' ::: 0 1 2 3 env_parallel -k --env myarray echo '"${myarray[{}]}"' ::: 0 1 2 3
env_parallel -k --env myarray -S server echo '"${myarray[{}]}"' ::: 0 1 2 3 env_parallel -k --env myarray -S server echo '"${myarray[{}]}"' ::: 0 1 2 3
echo This may never work
echo https://unix.stackexchange.com/questions/457031/extract-full-function-definitions
env_parallel --argsep --- env_parallel -k echo ::: multi level --- env_parallel env_parallel --argsep --- env_parallel -k echo ::: multi level --- env_parallel
env_parallel ::: true false true false env_parallel ::: true false true false
@ -1502,6 +1504,7 @@ par_fish_env_parallel() {
echo 'bug #50435: Remote fifo broke in 20150522' echo 'bug #50435: Remote fifo broke in 20150522'
# Due to $PARALLEL_TMP being transferred # Due to $PARALLEL_TMP being transferred
set OK OK set OK OK
echo TODO fix env_parallel --fifo
echo data from stdin | env_parallel --pipe -S lo --fifo 'cat {}; and echo $OK' echo data from stdin | env_parallel --pipe -S lo --fifo 'cat {}; and echo $OK'
echo data from stdin | env_parallel --pipe -S lo --cat 'cat {}; and echo $OK' echo data from stdin | env_parallel --pipe -S lo --cat 'cat {}; and echo $OK'
_EOF _EOF

View file

@ -41,6 +41,7 @@ rm /tmp/parallel-script-for-script3
stdout parallel --citation < /dev/null stdout parallel --citation < /dev/null
touch ~/.parallel/will-cite touch ~/.parallel/will-cite
echo 1 > ~/.parallel/runs-without-willing-to-cite
# Clear screen # Clear screen
eval `resize` eval `resize`
seq $LINES | parallel -N0 echo > /dev/tty seq $LINES | parallel -N0 echo > /dev/tty

View file

@ -18,8 +18,8 @@ perl -e 'print map {"more_than_5000-$_\n" } (4000..9999)' | parallel -vj 0 touch
echo '### rm' echo '### rm'
perl -e 'print map {"more_than_5000-$_\n" } (4000..9900)' | parallel -j 0 rm | sort perl -e 'print map {"more_than_5000-$_\n" } (4000..9900)' | parallel -j 0 rm | sort
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 | egrep -v 'parallel: Warning: Starting|parallel: Warning: Consider' cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 | egrep -v 'parallel: Warning: Starting|parallel: Warning: Consider'
ls | parallel -j500 'sleep 1; find {} -type f | perl -ne "END{print $..\" {}\n\"}"' | sort ls | parallel -j500 'sleep 1; find {} -type f | perl -ne "END{print $..\" "{=$_=pQ($_)=}"\n\"}"' | sort
ls | parallel --group -j500 'sleep 1; find {} -type f | perl -ne "END{print $..\" {}\n\"}"' | sort ls | parallel --group -j500 'sleep 1; find {} -type f | perl -ne "END{print $..\" "{=$_=pQ($_)=}"\n\"}"' | sort
find . -type f | parallel --group "perl -ne '/^\\S+\\s+\\S+$/ and print \$ARGV,\"\\n\"'" | sort find . -type f | parallel --group "perl -ne '/^\\S+\\s+\\S+$/ and print \$ARGV,\"\\n\"'" | sort
find . -type f | parallel -v --group "perl -ne '/^\\S+\\s+\\S+$/ and print \$ARGV,\"\\n\"'" | sort find . -type f | parallel -v --group "perl -ne '/^\\S+\\s+\\S+$/ and print \$ARGV,\"\\n\"'" | sort
find . -type f | parallel -q --group perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' | sort find . -type f | parallel -q --group perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' | sort

View file

@ -37,6 +37,7 @@ par_special_char() {
echo a"$SPC"b 5 echo a"$SPC"b 5
LANG=C stdout parallel --env SPC echo 'a"$SPC"b' ::: 5 LANG=C stdout parallel --env SPC echo 'a"$SPC"b' ::: 5
LANG=C stdout parallel -S localhost --env SPC echo 'a"$SPC"b' ::: 5 LANG=C stdout parallel -S localhost --env SPC echo 'a"$SPC"b' ::: 5
# \ misses due to quoting incompatiblilty between bash and csh
LANG=C stdout parallel -S csh@localhost --env SPC echo 'a"$SPC"b' ::: 5 LANG=C stdout parallel -S csh@localhost --env SPC echo 'a"$SPC"b' ::: 5
LANG=C stdout parallel -S tcsh@localhost --env SPC echo 'a"$SPC"b' ::: 5 LANG=C stdout parallel -S tcsh@localhost --env SPC echo 'a"$SPC"b' ::: 5
} }

View file

@ -27,40 +27,28 @@ export -f par_tmux
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj8 --delay 1 --timeout 100 --retries 1 -k --joblog /tmp/jl-`basename $0` -L1 cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj8 --delay 1 --timeout 100 --retries 1 -k --joblog /tmp/jl-`basename $0` -L1
echo '### tmux-1.9' echo '### tmux-1.9'
seq 000 100 | PARALLEL_TMUX=tmux-1.9 par_tmux seq 0000 10 1000 | PARALLEL_TMUX=tmux-1.9 par_tmux
seq 100 200 | PARALLEL_TMUX=tmux-1.9 par_tmux seq 1001 10 2000 | PARALLEL_TMUX=tmux-1.9 par_tmux
seq 200 300 | PARALLEL_TMUX=tmux-1.9 par_tmux seq 2001 10 3000 | PARALLEL_TMUX=tmux-1.9 par_tmux
seq 300 400 | PARALLEL_TMUX=tmux-1.9 par_tmux seq 3001 10 4000 | PARALLEL_TMUX=tmux-1.9 par_tmux
seq 400 500 | PARALLEL_TMUX=tmux-1.9 par_tmux seq 4001 10 4030 | PARALLEL_TMUX=tmux-1.9 par_tmux
seq 500 600 | PARALLEL_TMUX=tmux-1.9 par_tmux
seq 600 700 | PARALLEL_TMUX=tmux-1.9 par_tmux
seq 700 800 | PARALLEL_TMUX=tmux-1.9 par_tmux
seq 800 900 | PARALLEL_TMUX=tmux-1.9 par_tmux
seq 900 1000 | PARALLEL_TMUX=tmux-1.9 par_tmux
seq 1000 1100 | PARALLEL_TMUX=tmux-1.9 par_tmux
seq 1100 1200 | PARALLEL_TMUX=tmux-1.9 par_tmux
seq 1200 1300 | PARALLEL_TMUX=tmux-1.9 par_tmux
seq 1300 1400 | PARALLEL_TMUX=tmux-1.9 par_tmux
seq 1400 1500 | PARALLEL_TMUX=tmux-1.9 par_tmux
seq 1500 1600 | PARALLEL_TMUX=tmux-1.9 par_tmux
seq 1600 1700 | PARALLEL_TMUX=tmux-1.9 par_tmux
seq 1700 1800 | PARALLEL_TMUX=tmux-1.9 par_tmux
seq 1800 1900 | PARALLEL_TMUX=tmux-1.9 par_tmux
seq 1900 2000 | PARALLEL_TMUX=tmux-1.9 par_tmux
seq 2000 2018 | PARALLEL_TMUX=tmux-1.9 par_tmux
echo '### tmux-1.9 fails' echo '### tmux-1.9 fails'
echo 2019 | PARALLEL_TMUX=tmux-1.9 par_tmux echo 4036 | PARALLEL_TMUX=tmux-1.9 par_tmux
echo 2020 | PARALLEL_TMUX=tmux-1.9 par_tmux echo 4037 | PARALLEL_TMUX=tmux-1.9 par_tmux
echo 2021 | PARALLEL_TMUX=tmux-1.9 par_tmux echo 4038 | PARALLEL_TMUX=tmux-1.9 par_tmux
echo '### tmux-1.8' echo '### tmux-1.8'
seq 1 100 | PARALLEL_TMUX=tmux-1.8 par_tmux seq 1 5 100 | PARALLEL_TMUX=tmux-1.8 par_tmux
seq 101 200 | PARALLEL_TMUX=tmux-1.8 par_tmux seq 101 5 200 | PARALLEL_TMUX=tmux-1.8 par_tmux
seq 201 231 | PARALLEL_TMUX=tmux-1.8 par_tmux seq 201 5 300 | PARALLEL_TMUX=tmux-1.8 par_tmux
seq 301 5 400 | PARALLEL_TMUX=tmux-1.8 par_tmux
seq 401 5 460 | PARALLEL_TMUX=tmux-1.8 par_tmux
echo '### tmux-1.8 fails' echo '### tmux-1.8 fails'
echo 232 | PARALLEL_TMUX=tmux-1.8 par_tmux echo 462 | PARALLEL_TMUX=tmux-1.8 par_tmux
echo 233 | PARALLEL_TMUX=tmux-1.8 par_tmux echo 463 | PARALLEL_TMUX=tmux-1.8 par_tmux
echo 234 | PARALLEL_TMUX=tmux-1.8 par_tmux echo 464 | PARALLEL_TMUX=tmux-1.8 par_tmux
echo '### tmux-1.8 0..255 ascii' echo '### tmux-1.8 0..255 ascii'
perl -e 'print map { ($_, map { pack("c*",$_) } grep { $_>=1 && $_!=10 } $_-110..$_),"\n" } 0..255' | perl -e 'print map { ($_, map { pack("c*",$_) } grep { $_>=1 && $_!=10 } $_-110..$_),"\n" } 0..255' |

View file

@ -49,18 +49,6 @@ echo '### Test --spreadstdin -k';
echo '### Test --spreadstdin --files'; echo '### Test --spreadstdin --files';
nice seq 1 1000000 | shuf | $NICEPAR --files --recend "\n" -j10 --spreadstdin sort -n | parallel -Xj1 sort -nm {} ";"rm {} | md5sum nice seq 1 1000000 | shuf | $NICEPAR --files --recend "\n" -j10 --spreadstdin sort -n | parallel -Xj1 sort -nm {} ";"rm {} | md5sum
echo '### Test --number-of-cpus';
stdout $NICEPAR --number-of-cpus
echo '### Test --number-of-cores';
stdout $NICEPAR --number-of-cores
echo '### Test --use-cpus-instead-of-cores';
(seq 1 8 | stdout parallel --use-cpus-instead-of-cores -j100% sleep) && echo CPUs done &
(seq 1 8 | stdout parallel -j100% sleep) && echo cores done &
echo 'Cores should complete first on machines with less than 8 physical CPUs';
wait
echo '### Test --tag ::: a ::: b'; echo '### Test --tag ::: a ::: b';
stdout $NICEPAR -k --tag -j1 echo stderr-{.} ">&2;" echo stdout-{} ::: a ::: b stdout $NICEPAR -k --tag -j1 echo stderr-{.} ">&2;" echo stdout-{} ::: a ::: b

View file

@ -348,9 +348,9 @@ echo '**'
echo 'bug #47290: xargs: Warning: a NUL character occurred in the input' echo 'bug #47290: xargs: Warning: a NUL character occurred in the input'
bug #47290: xargs: Warning: a NUL character occurred in the input bug #47290: xargs: Warning: a NUL character occurred in the input
perl -e 'print "foo\0not printed"' | parallel echo perl -e 'print "foo\0not printed"' | parallel echo
foo foo\0not printed
parallel: Warning: a NUL character occurred in the input. parallel: Warning: A NUL character in the input was replaced with \0.
parallel: Warning: It cannot be passed through in the argument list. parallel: Warning: NUL cannot be passed through in the argument list.
parallel: Warning: Did you mean to use the --null option? parallel: Warning: Did you mean to use the --null option?
echo '**' echo '**'
** **
@ -979,106 +979,106 @@ h i
97 97
98 98
99 99
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 1 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 1
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 10 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 10
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 100 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 100
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 11 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 11
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 12 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 12
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 13 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 13
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 14 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 14
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 15 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 15
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 16 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 16
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 17 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 17
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 18 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 18
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 19 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 19
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 2 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 2
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 20 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 20
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 21 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 21
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 22 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 22
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 23 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 23
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 24 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 24
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 25 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 25
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 26 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 26
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 27 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 27
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 28 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 28
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 29 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 29
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 3 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 3
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 30 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 30
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 31 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 31
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 32 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 32
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 33 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 33
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 34 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 34
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 35 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 35
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 36 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 36
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 37 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 37
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 38 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 38
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 39 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 39
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 4 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 4
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 40 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 40
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 41 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 41
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 42 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 42
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 43 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 43
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 44 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 44
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 45 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 45
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 46 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 46
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 47 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 47
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 48 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 48
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 49 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 49
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 5 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 5
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 50 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 50
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 51 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 51
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 52 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 52
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 53 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 53
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 54 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 54
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 55 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 55
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 56 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 56
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 57 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 57
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 58 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 58
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 59 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 59
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 6 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 6
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 60 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 60
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 61 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 61
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 62 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 62
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 63 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 63
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 64 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 64
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 65 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 65
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 66 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 66
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 67 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 67
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 68 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 68
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 69 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 69
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 7 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 7
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 70 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 70
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 71 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 71
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 72 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 72
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 73 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 73
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 74 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 74
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 75 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 75
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 76 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 76
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 77 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 77
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 78 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 78
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 79 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 79
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 8 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 8
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 80 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 80
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 81 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 81
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 82 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 82
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 83 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 83
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 84 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 84
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 85 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 85
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 86 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 86
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 87 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 87
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 88 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 88
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 89 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 89
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 9 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 9
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 90 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 90
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 91 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 91
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 92 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 92
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 93 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 93
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 94 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 94
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 95 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 95
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 96 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 96
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 97 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 97
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 98 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 98
perl -e \$r\=rand\(shift\)\;for\(\$f\=0\;\$f\<\$r\;\$f++\)\{\$a\=\"a\"x100\}\;print\ shift,\"\\n\" 10000 99 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 99
echo '### Test 0-arguments' echo '### Test 0-arguments'
### Test 0-arguments ### Test 0-arguments
seq 1 2 | parallel -k -n0 echo n0 seq 1 2 | parallel -k -n0 echo n0
@ -1321,7 +1321,7 @@ par_expansion_in_colsep AB
par_extglob env_parallel par_extglob env_parallel
par_file_ending_in_newline ### Hans found a bug giving unitialized variable par_file_ending_in_newline ### Hans found a bug giving unitialized variable
par_file_ending_in_newline gzip /tmp/parallel_f1 par_file_ending_in_newline gzip /tmp/parallel_f1
par_file_ending_in_newline gzip /tmp/parallel_f2' par_file_ending_in_newline gzip '/tmp/parallel_f2
par_file_ending_in_newline ' par_file_ending_in_newline '
par_halt_one_job # Halt soon if there is a single job par_halt_one_job # Halt soon if there is a single job
par_halt_one_job should run 0 1 = job 1 2 par_halt_one_job should run 0 1 = job 1 2
@ -1372,8 +1372,8 @@ par_link_files_as_only_arg 3 3 3
par_locale_quoting ### quoting in different locales par_locale_quoting ### quoting in different locales
par_locale_quoting £`/tmp/test£` par_locale_quoting £`/tmp/test£`
par_locale_quoting $LC_ALL £`/tmp/test£` par_locale_quoting $LC_ALL £`/tmp/test£`
par_locale_quoting echo $LC_ALL \£\`/tmp/test\£\` par_locale_quoting echo $LC_ALL '£`/tmp/test£`'
par_locale_quoting C £`/tmp/test£` par_locale_quoting zh_HK.big5hkscs £`/tmp/test£`
par_newline_in_command Command with newline and positional replacement strings par_newline_in_command Command with newline and positional replacement strings
par_newline_in_command O K par_newline_in_command O K
par_no_command_given ### Test bugfix if no command given par_no_command_given ### Test bugfix if no command given

View file

@ -256,6 +256,9 @@ par_linebuffer_tag_slow_output a a
par_linebuffer_tag_slow_output a par_linebuffer_tag_slow_output a
par_linebuffer_tag_slow_output b b par_linebuffer_tag_slow_output b b
par_linebuffer_tag_slow_output b par_linebuffer_tag_slow_output b
par_long_line_remote ### Deal with long command lines on remote servers
par_long_line_remote 2 6 30006
par_long_line_remote 2 50 250050
par_maxlinelen_X_I ### Test max line length -X -I par_maxlinelen_X_I ### Test max line length -X -I
par_maxlinelen_X_I 3cfc69ee81b0fe7fdbe8eb059ad2da61 - par_maxlinelen_X_I 3cfc69ee81b0fe7fdbe8eb059ad2da61 -
par_maxlinelen_X_I Chars per line (817788/7): 116826 par_maxlinelen_X_I Chars per line (817788/7): 116826
@ -523,6 +526,15 @@ par_slow_total_jobs b
par_slow_total_jobs 1 par_slow_total_jobs 1
par_slow_total_jobs 2 par_slow_total_jobs 2
par_slow_total_jobs parallel: Warning: Reading X arguments took longer than XX seconds. par_slow_total_jobs parallel: Warning: Reading X arguments took longer than XX seconds.
par_sockets_cores_threads ### Test --number-of-sockets/cores/threads
par_sockets_cores_threads 1
par_sockets_cores_threads 2
par_sockets_cores_threads 2
par_sockets_cores_threads 2
par_sockets_cores_threads ### Test --use-sockets-instead-of-threads
par_sockets_cores_threads threads done
par_sockets_cores_threads sockets done
par_sockets_cores_threads Threads should complete first on machines with less than 8 sockets
par_tmux_fg bug #50107: --tmux --fg should also write how to access it par_tmux_fg bug #50107: --tmux --fg should also write how to access it
par_tmux_fg See output with: tmux -S tmp attach par_tmux_fg See output with: tmux -S tmp attach
par_tmux_fg open terminal failed: not a terminal par_tmux_fg open terminal failed: not a terminal

View file

@ -27,84 +27,84 @@ par_failing_compressor Compress with failing (de)compressor
par_failing_compressor Test --tag/--line-buffer/--files in all combinations par_failing_compressor Test --tag/--line-buffer/--files in all combinations
par_failing_compressor Test working/failing compressor/decompressor in all combinations par_failing_compressor Test working/failing compressor/decompressor in all combinations
par_failing_compressor (-k is used as a dummy argument) par_failing_compressor (-k is used as a dummy argument)
par_failing_compressor parallel -k --tag --line-buffer --files --compress --compress-program cat\;true --decompress-program cat\;true echo ::: C=cat\;true,D=cat\;true par_failing_compressor parallel -k --tag --line-buffer --files --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: C='cat;true',D='cat;true'
par_failing_compressor C=cat;true,D=cat;true /tmp/parallel-local-1s-tmpdir/tmpfile par_failing_compressor C=cat;true,D=cat;true /tmp/parallel-local-1s-tmpdir/tmpfile
par_failing_compressor parallel -k --tag --line-buffer --files --compress --compress-program cat\;true --decompress-program cat\;false echo ::: C=cat\;true,D=cat\;false par_failing_compressor parallel -k --tag --line-buffer --files --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: C='cat;true',D='cat;false'
par_failing_compressor C=cat;true,D=cat;false /tmp/parallel-local-1s-tmpdir/tmpfile par_failing_compressor C=cat;true,D=cat;false /tmp/parallel-local-1s-tmpdir/tmpfile
par_failing_compressor parallel -k --tag --line-buffer --files --compress --compress-program cat\;false --decompress-program cat\;true echo ::: C=cat\;false,D=cat\;true par_failing_compressor parallel -k --tag --line-buffer --files --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: C='cat;false',D='cat;true'
par_failing_compressor C=cat;false,D=cat;true /tmp/parallel-local-1s-tmpdir/tmpfile par_failing_compressor C=cat;false,D=cat;true /tmp/parallel-local-1s-tmpdir/tmpfile
par_failing_compressor parallel: Error: cat;false failed. par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel -k --tag --line-buffer --files --compress --compress-program cat\;false --decompress-program cat\;false echo ::: C=cat\;false,D=cat\;false par_failing_compressor parallel -k --tag --line-buffer --files --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: C='cat;false',D='cat;false'
par_failing_compressor C=cat;false,D=cat;false /tmp/parallel-local-1s-tmpdir/tmpfile par_failing_compressor C=cat;false,D=cat;false /tmp/parallel-local-1s-tmpdir/tmpfile
par_failing_compressor parallel: Error: cat;false failed. par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel -k --tag --line-buffer -k --compress --compress-program cat\;true --decompress-program cat\;true echo ::: C=cat\;true,D=cat\;true par_failing_compressor parallel -k --tag --line-buffer -k --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: C='cat;true',D='cat;true'
par_failing_compressor C=cat;true,D=cat;true C=cat;true,D=cat;true par_failing_compressor C=cat;true,D=cat;true C=cat;true,D=cat;true
par_failing_compressor parallel -k --tag --line-buffer -k --compress --compress-program cat\;true --decompress-program cat\;false echo ::: C=cat\;true,D=cat\;false par_failing_compressor parallel -k --tag --line-buffer -k --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: C='cat;true',D='cat;false'
par_failing_compressor C=cat;true,D=cat;false C=cat;true,D=cat;false par_failing_compressor C=cat;true,D=cat;false C=cat;true,D=cat;false
par_failing_compressor parallel -k --tag --line-buffer -k --compress --compress-program cat\;false --decompress-program cat\;true echo ::: C=cat\;false,D=cat\;true par_failing_compressor parallel -k --tag --line-buffer -k --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: C='cat;false',D='cat;true'
par_failing_compressor C=cat;false,D=cat;true C=cat;false,D=cat;true par_failing_compressor C=cat;false,D=cat;true C=cat;false,D=cat;true
par_failing_compressor parallel: Error: cat;false failed. par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel -k --tag --line-buffer -k --compress --compress-program cat\;false --decompress-program cat\;false echo ::: C=cat\;false,D=cat\;false par_failing_compressor parallel -k --tag --line-buffer -k --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: C='cat;false',D='cat;false'
par_failing_compressor C=cat;false,D=cat;false C=cat;false,D=cat;false par_failing_compressor C=cat;false,D=cat;false C=cat;false,D=cat;false
par_failing_compressor parallel: Error: cat;false failed. par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel -k --tag -k --files --compress --compress-program cat\;true --decompress-program cat\;true echo ::: C=cat\;true,D=cat\;true par_failing_compressor parallel -k --tag -k --files --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: C='cat;true',D='cat;true'
par_failing_compressor C=cat;true,D=cat;true /tmp/parallel-local-1s-tmpdir/tmpfile par_failing_compressor C=cat;true,D=cat;true /tmp/parallel-local-1s-tmpdir/tmpfile
par_failing_compressor parallel -k --tag -k --files --compress --compress-program cat\;true --decompress-program cat\;false echo ::: C=cat\;true,D=cat\;false par_failing_compressor parallel -k --tag -k --files --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: C='cat;true',D='cat;false'
par_failing_compressor C=cat;true,D=cat;false /tmp/parallel-local-1s-tmpdir/tmpfile par_failing_compressor C=cat;true,D=cat;false /tmp/parallel-local-1s-tmpdir/tmpfile
par_failing_compressor parallel -k --tag -k --files --compress --compress-program cat\;false --decompress-program cat\;true echo ::: C=cat\;false,D=cat\;true par_failing_compressor parallel -k --tag -k --files --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: C='cat;false',D='cat;true'
par_failing_compressor C=cat;false,D=cat;true /tmp/parallel-local-1s-tmpdir/tmpfile par_failing_compressor C=cat;false,D=cat;true /tmp/parallel-local-1s-tmpdir/tmpfile
par_failing_compressor parallel: Error: cat;false failed. par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel -k --tag -k --files --compress --compress-program cat\;false --decompress-program cat\;false echo ::: C=cat\;false,D=cat\;false par_failing_compressor parallel -k --tag -k --files --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: C='cat;false',D='cat;false'
par_failing_compressor C=cat;false,D=cat;false /tmp/parallel-local-1s-tmpdir/tmpfile par_failing_compressor C=cat;false,D=cat;false /tmp/parallel-local-1s-tmpdir/tmpfile
par_failing_compressor parallel: Error: cat;false failed. par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel -k --tag -k -k --compress --compress-program cat\;true --decompress-program cat\;true echo ::: C=cat\;true,D=cat\;true par_failing_compressor parallel -k --tag -k -k --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: C='cat;true',D='cat;true'
par_failing_compressor C=cat;true,D=cat;true C=cat;true,D=cat;true par_failing_compressor C=cat;true,D=cat;true C=cat;true,D=cat;true
par_failing_compressor parallel -k --tag -k -k --compress --compress-program cat\;true --decompress-program cat\;false echo ::: C=cat\;true,D=cat\;false par_failing_compressor parallel -k --tag -k -k --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: C='cat;true',D='cat;false'
par_failing_compressor C=cat;true,D=cat;false C=cat;true,D=cat;false par_failing_compressor C=cat;true,D=cat;false C=cat;true,D=cat;false
par_failing_compressor parallel -k --tag -k -k --compress --compress-program cat\;false --decompress-program cat\;true echo ::: C=cat\;false,D=cat\;true par_failing_compressor parallel -k --tag -k -k --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: C='cat;false',D='cat;true'
par_failing_compressor C=cat;false,D=cat;true C=cat;false,D=cat;true par_failing_compressor C=cat;false,D=cat;true C=cat;false,D=cat;true
par_failing_compressor parallel: Error: cat;false failed. par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel -k --tag -k -k --compress --compress-program cat\;false --decompress-program cat\;false echo ::: C=cat\;false,D=cat\;false par_failing_compressor parallel -k --tag -k -k --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: C='cat;false',D='cat;false'
par_failing_compressor C=cat;false,D=cat;false C=cat;false,D=cat;false par_failing_compressor C=cat;false,D=cat;false C=cat;false,D=cat;false
par_failing_compressor parallel: Error: cat;false failed. par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel -k -k --line-buffer --files --compress --compress-program cat\;true --decompress-program cat\;true echo ::: C=cat\;true,D=cat\;true par_failing_compressor parallel -k -k --line-buffer --files --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: C='cat;true',D='cat;true'
par_failing_compressor /tmp/parallel-local-1s-tmpdir/tmpfile par_failing_compressor /tmp/parallel-local-1s-tmpdir/tmpfile
par_failing_compressor parallel -k -k --line-buffer --files --compress --compress-program cat\;true --decompress-program cat\;false echo ::: C=cat\;true,D=cat\;false par_failing_compressor parallel -k -k --line-buffer --files --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: C='cat;true',D='cat;false'
par_failing_compressor /tmp/parallel-local-1s-tmpdir/tmpfile par_failing_compressor /tmp/parallel-local-1s-tmpdir/tmpfile
par_failing_compressor parallel -k -k --line-buffer --files --compress --compress-program cat\;false --decompress-program cat\;true echo ::: C=cat\;false,D=cat\;true par_failing_compressor parallel -k -k --line-buffer --files --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: C='cat;false',D='cat;true'
par_failing_compressor /tmp/parallel-local-1s-tmpdir/tmpfile par_failing_compressor /tmp/parallel-local-1s-tmpdir/tmpfile
par_failing_compressor parallel: Error: cat;false failed. par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel -k -k --line-buffer --files --compress --compress-program cat\;false --decompress-program cat\;false echo ::: C=cat\;false,D=cat\;false par_failing_compressor parallel -k -k --line-buffer --files --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: C='cat;false',D='cat;false'
par_failing_compressor /tmp/parallel-local-1s-tmpdir/tmpfile par_failing_compressor /tmp/parallel-local-1s-tmpdir/tmpfile
par_failing_compressor parallel: Error: cat;false failed. par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel -k -k --line-buffer -k --compress --compress-program cat\;true --decompress-program cat\;true echo ::: C=cat\;true,D=cat\;true par_failing_compressor parallel -k -k --line-buffer -k --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: C='cat;true',D='cat;true'
par_failing_compressor C=cat;true,D=cat;true par_failing_compressor C=cat;true,D=cat;true
par_failing_compressor parallel -k -k --line-buffer -k --compress --compress-program cat\;true --decompress-program cat\;false echo ::: C=cat\;true,D=cat\;false par_failing_compressor parallel -k -k --line-buffer -k --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: C='cat;true',D='cat;false'
par_failing_compressor C=cat;true,D=cat;false par_failing_compressor C=cat;true,D=cat;false
par_failing_compressor parallel -k -k --line-buffer -k --compress --compress-program cat\;false --decompress-program cat\;true echo ::: C=cat\;false,D=cat\;true par_failing_compressor parallel -k -k --line-buffer -k --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: C='cat;false',D='cat;true'
par_failing_compressor C=cat;false,D=cat;true par_failing_compressor C=cat;false,D=cat;true
par_failing_compressor parallel: Error: cat;false failed. par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel -k -k --line-buffer -k --compress --compress-program cat\;false --decompress-program cat\;false echo ::: C=cat\;false,D=cat\;false par_failing_compressor parallel -k -k --line-buffer -k --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: C='cat;false',D='cat;false'
par_failing_compressor C=cat;false,D=cat;false par_failing_compressor C=cat;false,D=cat;false
par_failing_compressor parallel: Error: cat;false failed. par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel -k -k -k --files --compress --compress-program cat\;true --decompress-program cat\;true echo ::: C=cat\;true,D=cat\;true par_failing_compressor parallel -k -k -k --files --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: C='cat;true',D='cat;true'
par_failing_compressor /tmp/parallel-local-1s-tmpdir/tmpfile par_failing_compressor /tmp/parallel-local-1s-tmpdir/tmpfile
par_failing_compressor parallel -k -k -k --files --compress --compress-program cat\;true --decompress-program cat\;false echo ::: C=cat\;true,D=cat\;false par_failing_compressor parallel -k -k -k --files --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: C='cat;true',D='cat;false'
par_failing_compressor /tmp/parallel-local-1s-tmpdir/tmpfile par_failing_compressor /tmp/parallel-local-1s-tmpdir/tmpfile
par_failing_compressor parallel -k -k -k --files --compress --compress-program cat\;false --decompress-program cat\;true echo ::: C=cat\;false,D=cat\;true par_failing_compressor parallel -k -k -k --files --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: C='cat;false',D='cat;true'
par_failing_compressor /tmp/parallel-local-1s-tmpdir/tmpfile par_failing_compressor /tmp/parallel-local-1s-tmpdir/tmpfile
par_failing_compressor parallel: Error: cat;false failed. par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel -k -k -k --files --compress --compress-program cat\;false --decompress-program cat\;false echo ::: C=cat\;false,D=cat\;false par_failing_compressor parallel -k -k -k --files --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: C='cat;false',D='cat;false'
par_failing_compressor /tmp/parallel-local-1s-tmpdir/tmpfile par_failing_compressor /tmp/parallel-local-1s-tmpdir/tmpfile
par_failing_compressor parallel: Error: cat;false failed. par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel -k -k -k -k --compress --compress-program cat\;true --decompress-program cat\;true echo ::: C=cat\;true,D=cat\;true par_failing_compressor parallel -k -k -k -k --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: C='cat;true',D='cat;true'
par_failing_compressor C=cat;true,D=cat;true par_failing_compressor C=cat;true,D=cat;true
par_failing_compressor parallel -k -k -k -k --compress --compress-program cat\;true --decompress-program cat\;false echo ::: C=cat\;true,D=cat\;false par_failing_compressor parallel -k -k -k -k --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: C='cat;true',D='cat;false'
par_failing_compressor C=cat;true,D=cat;false par_failing_compressor C=cat;true,D=cat;false
par_failing_compressor parallel -k -k -k -k --compress --compress-program cat\;false --decompress-program cat\;true echo ::: C=cat\;false,D=cat\;true par_failing_compressor parallel -k -k -k -k --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: C='cat;false',D='cat;true'
par_failing_compressor C=cat;false,D=cat;true par_failing_compressor C=cat;false,D=cat;true
par_failing_compressor parallel: Error: cat;false failed. par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel -k -k -k -k --compress --compress-program cat\;false --decompress-program cat\;false echo ::: C=cat\;false,D=cat\;false par_failing_compressor parallel -k -k -k -k --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: C='cat;false',D='cat;false'
par_failing_compressor C=cat;false,D=cat;false par_failing_compressor C=cat;false,D=cat;false
par_failing_compressor parallel: Error: cat;false failed. par_failing_compressor parallel: Error: cat;false failed.
par_fifo_under_csh ### Test --fifo under csh par_fifo_under_csh ### Test --fifo under csh
@ -371,26 +371,26 @@ par_result /tmp/parallel_results_test/testC/a/II/b/IIII/seq
par_result /tmp/parallel_results_test/testC/a/II/b/IIII/stderr par_result /tmp/parallel_results_test/testC/a/II/b/IIII/stderr
par_result /tmp/parallel_results_test/testC/a/II/b/IIII/stdout par_result /tmp/parallel_results_test/testC/a/II/b/IIII/stdout
par_result ### Test --results --header : piped par_result ### Test --results --header : piped
par_result parallel: Warning: a NUL character occurred in the input. par_result parallel: Warning: A NUL character in the input was replaced with \0.
par_result parallel: Warning: It cannot be passed through in the argument list. par_result parallel: Warning: NUL cannot be passed through in the argument list.
par_result parallel: Warning: Did you mean to use the --null option? par_result parallel: Warning: Did you mean to use the --null option?
par_result /tmp/parallel_results_test/testF/Col/backslash\\tab/2 par_result /tmp/parallel_results_test/testF/Col/backslash\\tab/2
par_result /tmp/parallel_results_test/testF/Col/backslash\\tab/2/slash\_null\0eof par_result /tmp/parallel_results_test/testF/Col/backslash\\tab/2/slash\_null\\0eof
par_result /tmp/parallel_results_test/testF/Col/backslash\\tab/2/slash\_null\0eof/seq par_result /tmp/parallel_results_test/testF/Col/backslash\\tab/2/slash\_null\\0eof/seq
par_result /tmp/parallel_results_test/testF/Col/backslash\\tab/2/slash\_null\0eof/stderr par_result /tmp/parallel_results_test/testF/Col/backslash\\tab/2/slash\_null\\0eof/stderr
par_result /tmp/parallel_results_test/testF/Col/backslash\\tab/2/slash\_null\0eof/stdout par_result /tmp/parallel_results_test/testF/Col/backslash\\tab/2/slash\_null\\0eof/stdout
par_result ### Test --results --header : piped - non-existing column header par_result ### Test --results --header : piped - non-existing column header
par_result parallel: Warning: a NUL character occurred in the input. par_result parallel: Warning: A NUL character in the input was replaced with \0.
par_result parallel: Warning: It cannot be passed through in the argument list. par_result parallel: Warning: NUL cannot be passed through in the argument list.
par_result parallel: Warning: Did you mean to use the --null option? par_result parallel: Warning: Did you mean to use the --null option?
par_result /tmp/parallel_results_test/testG/ par_result /tmp/parallel_results_test/testG/
par_result /tmp/parallel_results_test/testG/Col1 par_result /tmp/parallel_results_test/testG/Col1
par_result /tmp/parallel_results_test/testG/Col1/backslash\\tab par_result /tmp/parallel_results_test/testG/Col1/backslash\\tab
par_result /tmp/parallel_results_test/testG/Col1/backslash\\tab/2 par_result /tmp/parallel_results_test/testG/Col1/backslash\\tab/2
par_result /tmp/parallel_results_test/testG/Col1/backslash\\tab/2/slash\_null\0eof par_result /tmp/parallel_results_test/testG/Col1/backslash\\tab/2/slash\_null\\0eof
par_result /tmp/parallel_results_test/testG/Col1/backslash\\tab/2/slash\_null\0eof/seq par_result /tmp/parallel_results_test/testG/Col1/backslash\\tab/2/slash\_null\\0eof/seq
par_result /tmp/parallel_results_test/testG/Col1/backslash\\tab/2/slash\_null\0eof/stderr par_result /tmp/parallel_results_test/testG/Col1/backslash\\tab/2/slash\_null\\0eof/stderr
par_result /tmp/parallel_results_test/testG/Col1/backslash\\tab/2/slash\_null\0eof/stdout par_result /tmp/parallel_results_test/testG/Col1/backslash\\tab/2/slash\_null\\0eof/stdout
par_result /tmp/parallel_results_test/testG/Col1/v1 par_result /tmp/parallel_results_test/testG/Col1/v1
par_result /tmp/parallel_results_test/testG/Col1/v1/2 par_result /tmp/parallel_results_test/testG/Col1/v1/2
par_result /tmp/parallel_results_test/testG/Col1/v1/2/v2 par_result /tmp/parallel_results_test/testG/Col1/v1/2/v2

View file

@ -108,8 +108,8 @@ par_macron
par_macron "¯" ¯ par_macron "¯" ¯
par_macron ¯® par_macron ¯®
par_macron ¯® par_macron ¯®
par_macron ¯® ¯® par_macron ¯® ¯
par_macron ¯® ¯® par_macron ¯® ¯
par_macron ¯® par_macron ¯®
par_macron ¯® ¯ par_macron ¯® ¯
par_macron "¯®" ¯ par_macron "¯®" ¯
@ -164,41 +164,41 @@ par_race_condition1 8
par_race_condition1 9 par_race_condition1 9
par_race_condition1 10 par_race_condition1 10
par_shellquote ### Test --shellquote in all shells par_shellquote ### Test --shellquote in all shells
par_shellquote ash \\\\\\\\ ' par_shellquote ash '
par_shellquote ash '\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ par_shellquote ash  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7F>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
par_shellquote bash \\\\\\\\ ' par_shellquote bash '
par_shellquote bash '\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ par_shellquote bash  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7F>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
par_shellquote csh \\\\\\\\ "\ par_shellquote csh \\\\\\\\ "\
par_shellquote csh "\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ par_shellquote csh "\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ
par_shellquote dash \\\\\\\\ ' par_shellquote dash '
par_shellquote dash '\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ par_shellquote dash  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7F>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
par_shellquote fish \\\\\\\\ ' par_shellquote fish '
par_shellquote fish '\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ par_shellquote fish  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7F>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
par_shellquote fizsh \\\\\\\\ ' par_shellquote fizsh '
par_shellquote fizsh '\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ par_shellquote fizsh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7F>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
par_shellquote ksh \\\\\\\\ ' par_shellquote ksh '
par_shellquote ksh '\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ par_shellquote ksh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7F>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
par_shellquote ksh93 \\\\\\\\ ' par_shellquote ksh93 '
par_shellquote ksh93 '\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ par_shellquote ksh93  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7F>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
par_shellquote lksh \\\\\\\\ ' par_shellquote lksh '
par_shellquote lksh '\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ par_shellquote lksh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7F>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
par_shellquote mksh \\\\\\\\ ' par_shellquote mksh '
par_shellquote mksh '\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ par_shellquote mksh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7F>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
par_shellquote posh \\\\\\\\ ' par_shellquote posh '
par_shellquote posh '\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ par_shellquote posh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7F>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
par_shellquote rzsh zsh:1: /bin/echo: restricted par_shellquote rzsh zsh:1: /bin/echo: restricted
par_shellquote sash \\\\\\\\ ' par_shellquote sash '
par_shellquote sash '\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ par_shellquote sash  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7F>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
par_shellquote sh \\\\\\\\ ' par_shellquote sh '
par_shellquote sh '\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ par_shellquote sh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7F>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
par_shellquote static-sh \\\\\\\\ ' par_shellquote static-sh '
par_shellquote static-sh '\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ par_shellquote static-sh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7F>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
par_shellquote tcsh \\\\\\\\ "\ par_shellquote tcsh \\\\\\\\ "\
par_shellquote tcsh "\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ par_shellquote tcsh "\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ
par_shellquote yash \\\\\\\\ ' par_shellquote yash '
par_shellquote yash '\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ par_shellquote yash  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7F>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
par_shellquote zsh \\\\\\\\ ' par_shellquote zsh '
par_shellquote zsh '\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ par_shellquote zsh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7F>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
par_shellquote csh \\\\\\\\ "\ par_shellquote csh \\\\\\\\ "\
par_shellquote csh "\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ par_shellquote csh "\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ
par_shellquote tcsh \\\\\\\\ "\ par_shellquote tcsh \\\\\\\\ "\

View file

@ -58,7 +58,7 @@ par_kill_term_twice bash-+-perl---bash---sleep
par_kill_term_twice `-pstree par_kill_term_twice `-pstree
par_kill_term_twice parallel: SIGTERM received. No new jobs will be started. par_kill_term_twice parallel: SIGTERM received. No new jobs will be started.
par_kill_term_twice parallel: Waiting for these 1 jobs to finish. Send SIGTERM again to stop now. par_kill_term_twice parallel: Waiting for these 1 jobs to finish. Send SIGTERM again to stop now.
par_kill_term_twice parallel: bash -c sleep\ 120\ \&\ pid\=\$\!\;\ wait\ \$pid 1 par_kill_term_twice parallel: bash -c 'sleep 120 & pid=$!; wait $pid' 1
par_kill_term_twice bash-+-perl---bash---sleep par_kill_term_twice bash-+-perl---bash---sleep
par_kill_term_twice `-pstree par_kill_term_twice `-pstree
par_kill_term_twice bash---pstree par_kill_term_twice bash---pstree

View file

@ -12,20 +12,20 @@ par_print_before_halt_on_error ### What is printed before the jobs are killed
par_print_before_halt_on_error -2 exit code 0 par_print_before_halt_on_error -2 exit code 0
par_print_before_halt_on_error -2 0.1 0.1 par_print_before_halt_on_error -2 0.1 0.1
par_print_before_halt_on_error -2 parallel: This job succeeded: par_print_before_halt_on_error -2 parallel: This job succeeded:
par_print_before_halt_on_error -2 perl -e sleep\ 1\;\ sleep\ \$ARGV\[0\]\;\ print\ STDERR\ \"\",@ARGV,\"\\n\"\;\ -2\ \>\ 0\ \?\ exit\ shift\ :\ exit\ not\ shift\; 0.1 par_print_before_halt_on_error -2 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR "",@ARGV,"\n"; -2 > 0 ? exit shift : exit not shift;' 0.1
par_print_before_halt_on_error -1 exit code 0 par_print_before_halt_on_error -1 exit code 0
par_print_before_halt_on_error -1 0.1 0.1 par_print_before_halt_on_error -1 0.1 0.1
par_print_before_halt_on_error -1 parallel: This job succeeded: par_print_before_halt_on_error -1 parallel: This job succeeded:
par_print_before_halt_on_error -1 perl -e sleep\ 1\;\ sleep\ \$ARGV\[0\]\;\ print\ STDERR\ \"\",@ARGV,\"\\n\"\;\ -1\ \>\ 0\ \?\ exit\ shift\ :\ exit\ not\ shift\; 0.1 par_print_before_halt_on_error -1 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR "",@ARGV,"\n"; -1 > 0 ? exit shift : exit not shift;' 0.1
par_print_before_halt_on_error -1 parallel: Starting no more jobs. Waiting for 3 jobs to finish. par_print_before_halt_on_error -1 parallel: Starting no more jobs. Waiting for 3 jobs to finish.
par_print_before_halt_on_error -1 parallel: This job succeeded: par_print_before_halt_on_error -1 parallel: This job succeeded:
par_print_before_halt_on_error -1 perl -e sleep\ 1\;\ sleep\ \$ARGV\[0\]\;\ print\ STDERR\ \"\",@ARGV,\"\\n\"\;\ -1\ \>\ 0\ \?\ exit\ shift\ :\ exit\ not\ shift\; 1 par_print_before_halt_on_error -1 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR "",@ARGV,"\n"; -1 > 0 ? exit shift : exit not shift;' 1
par_print_before_halt_on_error -1 parallel: Starting no more jobs. Waiting for 1 jobs to finish. par_print_before_halt_on_error -1 parallel: Starting no more jobs. Waiting for 1 jobs to finish.
par_print_before_halt_on_error -1 3.2 3.2 par_print_before_halt_on_error -1 3.2 3.2
par_print_before_halt_on_error -1 0 0 par_print_before_halt_on_error -1 0 0
par_print_before_halt_on_error -1 1 1 par_print_before_halt_on_error -1 1 1
par_print_before_halt_on_error -1 parallel: This job succeeded: par_print_before_halt_on_error -1 parallel: This job succeeded:
par_print_before_halt_on_error -1 perl -e sleep\ 1\;\ sleep\ \$ARGV\[0\]\;\ print\ STDERR\ \"\",@ARGV,\"\\n\"\;\ -1\ \>\ 0\ \?\ exit\ shift\ :\ exit\ not\ shift\; 3.2 par_print_before_halt_on_error -1 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR "",@ARGV,"\n"; -1 > 0 ? exit shift : exit not shift;' 3.2
par_print_before_halt_on_error 0 exit code 1 par_print_before_halt_on_error 0 exit code 1
par_print_before_halt_on_error 0 0.1 0.1 par_print_before_halt_on_error 0 0.1 0.1
par_print_before_halt_on_error 0 3.2 3.2 par_print_before_halt_on_error 0 3.2 3.2
@ -42,22 +42,22 @@ par_print_before_halt_on_error 0 8 8
par_print_before_halt_on_error 1 exit code 1 par_print_before_halt_on_error 1 exit code 1
par_print_before_halt_on_error 1 0.1 0.1 par_print_before_halt_on_error 1 0.1 0.1
par_print_before_halt_on_error 1 parallel: This job failed: par_print_before_halt_on_error 1 parallel: This job failed:
par_print_before_halt_on_error 1 perl -e sleep\ 1\;\ sleep\ \$ARGV\[0\]\;\ print\ STDERR\ \"\",@ARGV,\"\\n\"\;\ 1\ \>\ 0\ \?\ exit\ shift\ :\ exit\ not\ shift\; 1 par_print_before_halt_on_error 1 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR "",@ARGV,"\n"; 1 > 0 ? exit shift : exit not shift;' 1
par_print_before_halt_on_error 1 parallel: Starting no more jobs. Waiting for 3 jobs to finish. par_print_before_halt_on_error 1 parallel: Starting no more jobs. Waiting for 3 jobs to finish.
par_print_before_halt_on_error 1 parallel: This job failed: par_print_before_halt_on_error 1 parallel: This job failed:
par_print_before_halt_on_error 1 perl -e sleep\ 1\;\ sleep\ \$ARGV\[0\]\;\ print\ STDERR\ \"\",@ARGV,\"\\n\"\;\ 1\ \>\ 0\ \?\ exit\ shift\ :\ exit\ not\ shift\; 2 par_print_before_halt_on_error 1 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR "",@ARGV,"\n"; 1 > 0 ? exit shift : exit not shift;' 2
par_print_before_halt_on_error 1 parallel: Starting no more jobs. Waiting for 2 jobs to finish. par_print_before_halt_on_error 1 parallel: Starting no more jobs. Waiting for 2 jobs to finish.
par_print_before_halt_on_error 1 3.2 3.2 par_print_before_halt_on_error 1 3.2 3.2
par_print_before_halt_on_error 1 0 0 par_print_before_halt_on_error 1 0 0
par_print_before_halt_on_error 1 1 1 par_print_before_halt_on_error 1 1 1
par_print_before_halt_on_error 1 2 2 par_print_before_halt_on_error 1 2 2
par_print_before_halt_on_error 1 parallel: This job failed: par_print_before_halt_on_error 1 parallel: This job failed:
par_print_before_halt_on_error 1 perl -e sleep\ 1\;\ sleep\ \$ARGV\[0\]\;\ print\ STDERR\ \"\",@ARGV,\"\\n\"\;\ 1\ \>\ 0\ \?\ exit\ shift\ :\ exit\ not\ shift\; 3.2 par_print_before_halt_on_error 1 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR "",@ARGV,"\n"; 1 > 0 ? exit shift : exit not shift;' 3.2
par_print_before_halt_on_error 1 parallel: Starting no more jobs. Waiting for 1 jobs to finish. par_print_before_halt_on_error 1 parallel: Starting no more jobs. Waiting for 1 jobs to finish.
par_print_before_halt_on_error 1 3 3 par_print_before_halt_on_error 1 3 3
par_print_before_halt_on_error 1 parallel: This job failed: par_print_before_halt_on_error 1 parallel: This job failed:
par_print_before_halt_on_error 1 perl -e sleep\ 1\;\ sleep\ \$ARGV\[0\]\;\ print\ STDERR\ \"\",@ARGV,\"\\n\"\;\ 1\ \>\ 0\ \?\ exit\ shift\ :\ exit\ not\ shift\; 3 par_print_before_halt_on_error 1 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR "",@ARGV,"\n"; 1 > 0 ? exit shift : exit not shift;' 3
par_print_before_halt_on_error 2 exit code 1 par_print_before_halt_on_error 2 exit code 1
par_print_before_halt_on_error 2 0.1 0.1 par_print_before_halt_on_error 2 0.1 0.1
par_print_before_halt_on_error 2 parallel: This job failed: par_print_before_halt_on_error 2 parallel: This job failed:
par_print_before_halt_on_error 2 perl -e sleep\ 1\;\ sleep\ \$ARGV\[0\]\;\ print\ STDERR\ \"\",@ARGV,\"\\n\"\;\ 2\ \>\ 0\ \?\ exit\ shift\ :\ exit\ not\ shift\; 1 par_print_before_halt_on_error 2 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR "",@ARGV,"\n"; 2 > 0 ? exit shift : exit not shift;' 1

View file

@ -1,4 +1,4 @@
par_append_different_cmd $MYSQL p_wrapper par_append_different_cmd \$MYSQL par_append_different_cmd $MYSQL p_wrapper par_append_different_cmd '$MYSQL'
par_append_different_cmd $MYSQL Exit=0 par_append_different_cmd $MYSQL Exit=0
par_append_different_cmd $MYSQL Exit=0 par_append_different_cmd $MYSQL Exit=0
par_append_different_cmd $MYSQL Command V1 V2 Stdout Stderr par_append_different_cmd $MYSQL Command V1 V2 Stdout Stderr
@ -52,7 +52,7 @@ par_append_different_cmd $MYSQL sleep .3;echo B-15 15 B B-15\n
par_append_different_cmd $MYSQL sleep .3;echo C-15 15 C C-15\n par_append_different_cmd $MYSQL sleep .3;echo C-15 15 C C-15\n
par_append_different_cmd $MYSQL sleep .3;echo D-15 15 D D-15\n par_append_different_cmd $MYSQL sleep .3;echo D-15 15 D D-15\n
par_append_different_cmd $MYSQL sleep .3;echo E-15 15 E E-15\n par_append_different_cmd $MYSQL sleep .3;echo E-15 15 E E-15\n
par_append_different_cmd $PG p_wrapper par_append_different_cmd \$PG par_append_different_cmd $PG p_wrapper par_append_different_cmd '$PG'
par_append_different_cmd $PG Exit=0 par_append_different_cmd $PG Exit=0
par_append_different_cmd $PG Exit=0 par_append_different_cmd $PG Exit=0
par_append_different_cmd $PG command | v1 | v2 | stdout | stderr par_append_different_cmd $PG command | v1 | v2 | stdout | stderr
@ -159,7 +159,7 @@ par_append_different_cmd $PG sleep .3;echo E-15 | 15 | E | E-15 +|
par_append_different_cmd $PG | | | | par_append_different_cmd $PG | | | |
par_append_different_cmd $PG (50 rows) par_append_different_cmd $PG (50 rows)
par_append_different_cmd $PG par_append_different_cmd $PG
par_append_different_cmd $SQLITE p_wrapper par_append_different_cmd \$SQLITE par_append_different_cmd $SQLITE p_wrapper par_append_different_cmd '$SQLITE'
par_append_different_cmd $SQLITE Exit=0 par_append_different_cmd $SQLITE Exit=0
par_append_different_cmd $SQLITE Exit=0 par_append_different_cmd $SQLITE Exit=0
par_append_different_cmd $SQLITE Command|V1|V2|Stdout|Stderr par_append_different_cmd $SQLITE Command|V1|V2|Stdout|Stderr
@ -263,7 +263,7 @@ par_append_different_cmd $SQLITE sleep .3;echo D-15|15|D|D-15
par_append_different_cmd $SQLITE | par_append_different_cmd $SQLITE |
par_append_different_cmd $SQLITE sleep .3;echo E-15|15|E|E-15 par_append_different_cmd $SQLITE sleep .3;echo E-15|15|E|E-15
par_append_different_cmd $SQLITE | par_append_different_cmd $SQLITE |
par_no_table $MYSQL p_wrapper par_no_table \$MYSQL par_no_table $MYSQL p_wrapper par_no_table '$MYSQL'
par_no_table $MYSQL bug #50018: --dburl without table dies par_no_table $MYSQL bug #50018: --dburl without table dies
par_no_table $MYSQL 255 par_no_table $MYSQL 255
par_no_table $MYSQL 255 par_no_table $MYSQL 255
@ -275,7 +275,7 @@ par_no_table $MYSQL true dummy dummy dummy dummy
par_no_table $MYSQL parallel: Error: The DBURL (mysql://tange:tange@lo/tange) must contain a table. par_no_table $MYSQL parallel: Error: The DBURL (mysql://tange:tange@lo/tange) must contain a table.
par_no_table $MYSQL parallel: Error: The DBURL (mysql://tange:tange@lo/tange) must contain a table. par_no_table $MYSQL parallel: Error: The DBURL (mysql://tange:tange@lo/tange) must contain a table.
par_no_table $MYSQL parallel: Error: The DBURL (mysql://tange:tange@lo/tange) must contain a table. par_no_table $MYSQL parallel: Error: The DBURL (mysql://tange:tange@lo/tange) must contain a table.
par_no_table $PG p_wrapper par_no_table \$PG par_no_table $PG p_wrapper par_no_table '$PG'
par_no_table $PG bug #50018: --dburl without table dies par_no_table $PG bug #50018: --dburl without table dies
par_no_table $PG 255 par_no_table $PG 255
par_no_table $PG 255 par_no_table $PG 255
@ -290,7 +290,7 @@ par_no_table $PG
par_no_table $PG parallel: Error: The DBURL (pg://tange:tange@lo/tange) must contain a table. par_no_table $PG parallel: Error: The DBURL (pg://tange:tange@lo/tange) must contain a table.
par_no_table $PG parallel: Error: The DBURL (pg://tange:tange@lo/tange) must contain a table. par_no_table $PG parallel: Error: The DBURL (pg://tange:tange@lo/tange) must contain a table.
par_no_table $PG parallel: Error: The DBURL (pg://tange:tange@lo/tange) must contain a table. par_no_table $PG parallel: Error: The DBURL (pg://tange:tange@lo/tange) must contain a table.
par_no_table $SQLITE p_wrapper par_no_table \$SQLITE par_no_table $SQLITE p_wrapper par_no_table '$SQLITE'
par_no_table $SQLITE bug #50018: --dburl without table dies par_no_table $SQLITE bug #50018: --dburl without table dies
par_no_table $SQLITE 255 par_no_table $SQLITE 255
par_no_table $SQLITE 255 par_no_table $SQLITE 255
@ -302,7 +302,7 @@ par_no_table $SQLITE true dummy dummy|dummy|dummy||
par_no_table $SQLITE parallel: Error: The DBURL (sqlite3:///%2Frun%2Fshm%2Fparallel.db) must contain a table. par_no_table $SQLITE parallel: Error: The DBURL (sqlite3:///%2Frun%2Fshm%2Fparallel.db) must contain a table.
par_no_table $SQLITE parallel: Error: The DBURL (sqlite3:///%2Frun%2Fshm%2Fparallel.db) must contain a table. par_no_table $SQLITE parallel: Error: The DBURL (sqlite3:///%2Frun%2Fshm%2Fparallel.db) must contain a table.
par_no_table $SQLITE parallel: Error: The DBURL (sqlite3:///%2Frun%2Fshm%2Fparallel.db) must contain a table. par_no_table $SQLITE parallel: Error: The DBURL (sqlite3:///%2Frun%2Fshm%2Fparallel.db) must contain a table.
par_shuf $MYSQL p_wrapper par_shuf \$MYSQL par_shuf $MYSQL p_wrapper par_shuf '$MYSQL'
par_shuf $MYSQL 1 a par_shuf $MYSQL 1 a
par_shuf $MYSQL 1 b par_shuf $MYSQL 1 b
par_shuf $MYSQL 1 c par_shuf $MYSQL 1 c
@ -357,7 +357,7 @@ par_shuf $MYSQL sleep .3;echo 5 b 5 b /tmp/parallel-bug49791-c20/1/5/2/b/stdout
par_shuf $MYSQL sleep .3;echo 5 c 5 c /tmp/parallel-bug49791-c20/1/5/2/c/stdout /tmp/parallel-bug49791-c20/1/5/2/c/stderr par_shuf $MYSQL sleep .3;echo 5 c 5 c /tmp/parallel-bug49791-c20/1/5/2/c/stdout /tmp/parallel-bug49791-c20/1/5/2/c/stderr
par_shuf $MYSQL sleep .3;echo 5 d 5 d /tmp/parallel-bug49791-c20/1/5/2/d/stdout /tmp/parallel-bug49791-c20/1/5/2/d/stderr par_shuf $MYSQL sleep .3;echo 5 d 5 d /tmp/parallel-bug49791-c20/1/5/2/d/stdout /tmp/parallel-bug49791-c20/1/5/2/d/stderr
par_shuf $MYSQL sleep .3;echo 5 e 5 e /tmp/parallel-bug49791-c20/1/5/2/e/stdout /tmp/parallel-bug49791-c20/1/5/2/e/stderr par_shuf $MYSQL sleep .3;echo 5 e 5 e /tmp/parallel-bug49791-c20/1/5/2/e/stdout /tmp/parallel-bug49791-c20/1/5/2/e/stderr
par_shuf $PG p_wrapper par_shuf \$PG par_shuf $PG p_wrapper par_shuf '$PG'
par_shuf $PG 1 a par_shuf $PG 1 a
par_shuf $PG 1 b par_shuf $PG 1 b
par_shuf $PG 1 c par_shuf $PG 1 c
@ -415,7 +415,7 @@ par_shuf $PG sleep .3;echo 5 d | 5 | d | /tmp/parallel-bug49791-792/1/5/2/d/s
par_shuf $PG sleep .3;echo 5 e | 5 | e | /tmp/parallel-bug49791-792/1/5/2/e/stdout | /tmp/parallel-bug49791-792/1/5/2/e/stderr par_shuf $PG sleep .3;echo 5 e | 5 | e | /tmp/parallel-bug49791-792/1/5/2/e/stdout | /tmp/parallel-bug49791-792/1/5/2/e/stderr
par_shuf $PG (25 rows) par_shuf $PG (25 rows)
par_shuf $PG par_shuf $PG
par_shuf $SQLITE p_wrapper par_shuf \$SQLITE par_shuf $SQLITE p_wrapper par_shuf '$SQLITE'
par_shuf $SQLITE 1 a par_shuf $SQLITE 1 a
par_shuf $SQLITE 1 b par_shuf $SQLITE 1 b
par_shuf $SQLITE 1 c par_shuf $SQLITE 1 c
@ -470,7 +470,7 @@ par_shuf $SQLITE sleep .3;echo 5 b|5|b|/tmp/parallel-bug49791-932/1/5/2/b/stdout
par_shuf $SQLITE sleep .3;echo 5 c|5|c|/tmp/parallel-bug49791-932/1/5/2/c/stdout|/tmp/parallel-bug49791-932/1/5/2/c/stderr par_shuf $SQLITE sleep .3;echo 5 c|5|c|/tmp/parallel-bug49791-932/1/5/2/c/stdout|/tmp/parallel-bug49791-932/1/5/2/c/stderr
par_shuf $SQLITE sleep .3;echo 5 d|5|d|/tmp/parallel-bug49791-932/1/5/2/d/stdout|/tmp/parallel-bug49791-932/1/5/2/d/stderr par_shuf $SQLITE sleep .3;echo 5 d|5|d|/tmp/parallel-bug49791-932/1/5/2/d/stdout|/tmp/parallel-bug49791-932/1/5/2/d/stderr
par_shuf $SQLITE sleep .3;echo 5 e|5|e|/tmp/parallel-bug49791-932/1/5/2/e/stdout|/tmp/parallel-bug49791-932/1/5/2/e/stderr par_shuf $SQLITE sleep .3;echo 5 e|5|e|/tmp/parallel-bug49791-932/1/5/2/e/stdout|/tmp/parallel-bug49791-932/1/5/2/e/stderr
par_sql_joblog $MYSQL p_wrapper par_sql_joblog \$MYSQL par_sql_joblog $MYSQL p_wrapper par_sql_joblog '$MYSQL'
par_sql_joblog $MYSQL ### should only give a single --joblog heading par_sql_joblog $MYSQL ### should only give a single --joblog heading
par_sql_joblog $MYSQL ### --sqlmaster/--sqlworker par_sql_joblog $MYSQL ### --sqlmaster/--sqlworker
par_sql_joblog $MYSQL Seq Host Starttime JobRuntime Send Receive Exitval Signal Command par_sql_joblog $MYSQL Seq Host Starttime JobRuntime Send Receive Exitval Signal Command
@ -604,7 +604,7 @@ par_sql_joblog $MYSQL sleep .3;echo 5 b 5 b 5 b\n
par_sql_joblog $MYSQL sleep .3;echo 5 c 5 c 5 c\n par_sql_joblog $MYSQL sleep .3;echo 5 c 5 c 5 c\n
par_sql_joblog $MYSQL sleep .3;echo 5 d 5 d 5 d\n par_sql_joblog $MYSQL sleep .3;echo 5 d 5 d 5 d\n
par_sql_joblog $MYSQL sleep .3;echo 5 e 5 e 5 e\n par_sql_joblog $MYSQL sleep .3;echo 5 e 5 e 5 e\n
par_sql_joblog $PG p_wrapper par_sql_joblog \$PG par_sql_joblog $PG p_wrapper par_sql_joblog '$PG'
par_sql_joblog $PG ### should only give a single --joblog heading par_sql_joblog $PG ### should only give a single --joblog heading
par_sql_joblog $PG ### --sqlmaster/--sqlworker par_sql_joblog $PG ### --sqlmaster/--sqlworker
par_sql_joblog $PG Seq Host Starttime JobRuntime Send Receive Exitval Signal Command par_sql_joblog $PG Seq Host Starttime JobRuntime Send Receive Exitval Signal Command
@ -766,7 +766,7 @@ par_sql_joblog $PG sleep .3;echo 5 e | 5 | e | 5 e +|
par_sql_joblog $PG | | | | par_sql_joblog $PG | | | |
par_sql_joblog $PG (25 rows) par_sql_joblog $PG (25 rows)
par_sql_joblog $PG par_sql_joblog $PG
par_sql_joblog $SQLITE p_wrapper par_sql_joblog \$SQLITE par_sql_joblog $SQLITE p_wrapper par_sql_joblog '$SQLITE'
par_sql_joblog $SQLITE ### should only give a single --joblog heading par_sql_joblog $SQLITE ### should only give a single --joblog heading
par_sql_joblog $SQLITE ### --sqlmaster/--sqlworker par_sql_joblog $SQLITE ### --sqlmaster/--sqlworker
par_sql_joblog $SQLITE Seq Host Starttime JobRuntime Send Receive Exitval Signal Command par_sql_joblog $SQLITE Seq Host Starttime JobRuntime Send Receive Exitval Signal Command
@ -925,7 +925,7 @@ par_sql_joblog $SQLITE sleep .3;echo 5 d|5|d|5 d
par_sql_joblog $SQLITE | par_sql_joblog $SQLITE |
par_sql_joblog $SQLITE sleep .3;echo 5 e|5|e|5 e par_sql_joblog $SQLITE sleep .3;echo 5 e|5|e|5 e
par_sql_joblog $SQLITE | par_sql_joblog $SQLITE |
par_sqlandworker $MYSQL p_wrapper par_sqlandworker \$MYSQL par_sqlandworker $MYSQL p_wrapper par_sqlandworker '$MYSQL'
par_sqlandworker $MYSQL Exit=0 par_sqlandworker $MYSQL Exit=0
par_sqlandworker $MYSQL Exit=0 par_sqlandworker $MYSQL Exit=0
par_sqlandworker $MYSQL Command V1 V2 Stdout Stderr par_sqlandworker $MYSQL Command V1 V2 Stdout Stderr
@ -954,7 +954,7 @@ par_sqlandworker $MYSQL sleep .3;echo 5 b 5 b 5 b\n
par_sqlandworker $MYSQL sleep .3;echo 5 c 5 c 5 c\n par_sqlandworker $MYSQL sleep .3;echo 5 c 5 c 5 c\n
par_sqlandworker $MYSQL sleep .3;echo 5 d 5 d 5 d\n par_sqlandworker $MYSQL sleep .3;echo 5 d 5 d 5 d\n
par_sqlandworker $MYSQL sleep .3;echo 5 e 5 e 5 e\n par_sqlandworker $MYSQL sleep .3;echo 5 e 5 e 5 e\n
par_sqlandworker $PG p_wrapper par_sqlandworker \$PG par_sqlandworker $PG p_wrapper par_sqlandworker '$PG'
par_sqlandworker $PG Exit=0 par_sqlandworker $PG Exit=0
par_sqlandworker $PG Exit=0 par_sqlandworker $PG Exit=0
par_sqlandworker $PG command | v1 | v2 | stdout | stderr par_sqlandworker $PG command | v1 | v2 | stdout | stderr
@ -1011,7 +1011,7 @@ par_sqlandworker $PG sleep .3;echo 5 e | 5 | e | 5 e +|
par_sqlandworker $PG | | | | par_sqlandworker $PG | | | |
par_sqlandworker $PG (25 rows) par_sqlandworker $PG (25 rows)
par_sqlandworker $PG par_sqlandworker $PG
par_sqlandworker $SQLITE p_wrapper par_sqlandworker \$SQLITE par_sqlandworker $SQLITE p_wrapper par_sqlandworker '$SQLITE'
par_sqlandworker $SQLITE Exit=0 par_sqlandworker $SQLITE Exit=0
par_sqlandworker $SQLITE Exit=0 par_sqlandworker $SQLITE Exit=0
par_sqlandworker $SQLITE Command|V1|V2|Stdout|Stderr par_sqlandworker $SQLITE Command|V1|V2|Stdout|Stderr
@ -1065,7 +1065,7 @@ par_sqlandworker $SQLITE sleep .3;echo 5 d|5|d|5 d
par_sqlandworker $SQLITE | par_sqlandworker $SQLITE |
par_sqlandworker $SQLITE sleep .3;echo 5 e|5|e|5 e par_sqlandworker $SQLITE sleep .3;echo 5 e|5|e|5 e
par_sqlandworker $SQLITE | par_sqlandworker $SQLITE |
par_sqlandworker_lo $MYSQL p_wrapper par_sqlandworker_lo \$MYSQL par_sqlandworker_lo $MYSQL p_wrapper par_sqlandworker_lo '$MYSQL'
par_sqlandworker_lo $MYSQL Exit=0 par_sqlandworker_lo $MYSQL Exit=0
par_sqlandworker_lo $MYSQL Exit=0 par_sqlandworker_lo $MYSQL Exit=0
par_sqlandworker_lo $MYSQL Command V1 V2 Stdout Stderr par_sqlandworker_lo $MYSQL Command V1 V2 Stdout Stderr
@ -1094,7 +1094,7 @@ par_sqlandworker_lo $MYSQL sleep .3;echo 5 b 5 b 5 b\n
par_sqlandworker_lo $MYSQL sleep .3;echo 5 c 5 c 5 c\n par_sqlandworker_lo $MYSQL sleep .3;echo 5 c 5 c 5 c\n
par_sqlandworker_lo $MYSQL sleep .3;echo 5 d 5 d 5 d\n par_sqlandworker_lo $MYSQL sleep .3;echo 5 d 5 d 5 d\n
par_sqlandworker_lo $MYSQL sleep .3;echo 5 e 5 e 5 e\n par_sqlandworker_lo $MYSQL sleep .3;echo 5 e 5 e 5 e\n
par_sqlandworker_lo $PG p_wrapper par_sqlandworker_lo \$PG par_sqlandworker_lo $PG p_wrapper par_sqlandworker_lo '$PG'
par_sqlandworker_lo $PG Exit=0 par_sqlandworker_lo $PG Exit=0
par_sqlandworker_lo $PG Exit=0 par_sqlandworker_lo $PG Exit=0
par_sqlandworker_lo $PG command | v1 | v2 | stdout | stderr par_sqlandworker_lo $PG command | v1 | v2 | stdout | stderr
@ -1151,7 +1151,7 @@ par_sqlandworker_lo $PG sleep .3;echo 5 e | 5 | e | 5 e +|
par_sqlandworker_lo $PG | | | | par_sqlandworker_lo $PG | | | |
par_sqlandworker_lo $PG (25 rows) par_sqlandworker_lo $PG (25 rows)
par_sqlandworker_lo $PG par_sqlandworker_lo $PG
par_sqlandworker_lo $SQLITE p_wrapper par_sqlandworker_lo \$SQLITE par_sqlandworker_lo $SQLITE p_wrapper par_sqlandworker_lo '$SQLITE'
par_sqlandworker_lo $SQLITE Exit=0 par_sqlandworker_lo $SQLITE Exit=0
par_sqlandworker_lo $SQLITE Exit=0 par_sqlandworker_lo $SQLITE Exit=0
par_sqlandworker_lo $SQLITE Command|V1|V2|Stdout|Stderr par_sqlandworker_lo $SQLITE Command|V1|V2|Stdout|Stderr
@ -1205,7 +1205,7 @@ par_sqlandworker_lo $SQLITE sleep .3;echo 5 d|5|d|5 d
par_sqlandworker_lo $SQLITE | par_sqlandworker_lo $SQLITE |
par_sqlandworker_lo $SQLITE sleep .3;echo 5 e|5|e|5 e par_sqlandworker_lo $SQLITE sleep .3;echo 5 e|5|e|5 e
par_sqlandworker_lo $SQLITE | par_sqlandworker_lo $SQLITE |
par_sqlandworker_results $MYSQL p_wrapper par_sqlandworker_results \$MYSQL par_sqlandworker_results $MYSQL p_wrapper par_sqlandworker_results '$MYSQL'
par_sqlandworker_results $MYSQL Exit=0 par_sqlandworker_results $MYSQL Exit=0
par_sqlandworker_results $MYSQL Exit=0 par_sqlandworker_results $MYSQL Exit=0
par_sqlandworker_results $MYSQL Command V1 V2 Stdout Stderr par_sqlandworker_results $MYSQL Command V1 V2 Stdout Stderr
@ -1234,7 +1234,7 @@ par_sqlandworker_results $MYSQL sleep .3;echo 5 b 5 b /tmp/out--sql/1/5/2/b/stdo
par_sqlandworker_results $MYSQL sleep .3;echo 5 c 5 c /tmp/out--sql/1/5/2/c/stdout /tmp/out--sql/1/5/2/c/stderr par_sqlandworker_results $MYSQL sleep .3;echo 5 c 5 c /tmp/out--sql/1/5/2/c/stdout /tmp/out--sql/1/5/2/c/stderr
par_sqlandworker_results $MYSQL sleep .3;echo 5 d 5 d /tmp/out--sql/1/5/2/d/stdout /tmp/out--sql/1/5/2/d/stderr par_sqlandworker_results $MYSQL sleep .3;echo 5 d 5 d /tmp/out--sql/1/5/2/d/stdout /tmp/out--sql/1/5/2/d/stderr
par_sqlandworker_results $MYSQL sleep .3;echo 5 e 5 e /tmp/out--sql/1/5/2/e/stdout /tmp/out--sql/1/5/2/e/stderr par_sqlandworker_results $MYSQL sleep .3;echo 5 e 5 e /tmp/out--sql/1/5/2/e/stdout /tmp/out--sql/1/5/2/e/stderr
par_sqlandworker_results $PG p_wrapper par_sqlandworker_results \$PG par_sqlandworker_results $PG p_wrapper par_sqlandworker_results '$PG'
par_sqlandworker_results $PG Exit=0 par_sqlandworker_results $PG Exit=0
par_sqlandworker_results $PG Exit=0 par_sqlandworker_results $PG Exit=0
par_sqlandworker_results $PG command | v1 | v2 | stdout | stderr par_sqlandworker_results $PG command | v1 | v2 | stdout | stderr
@ -1266,7 +1266,7 @@ par_sqlandworker_results $PG sleep .3;echo 5 d | 5 | d | /tmp/out--sql/1/5/2/
par_sqlandworker_results $PG sleep .3;echo 5 e | 5 | e | /tmp/out--sql/1/5/2/e/stdout | /tmp/out--sql/1/5/2/e/stderr par_sqlandworker_results $PG sleep .3;echo 5 e | 5 | e | /tmp/out--sql/1/5/2/e/stdout | /tmp/out--sql/1/5/2/e/stderr
par_sqlandworker_results $PG (25 rows) par_sqlandworker_results $PG (25 rows)
par_sqlandworker_results $PG par_sqlandworker_results $PG
par_sqlandworker_results $SQLITE p_wrapper par_sqlandworker_results \$SQLITE par_sqlandworker_results $SQLITE p_wrapper par_sqlandworker_results '$SQLITE'
par_sqlandworker_results $SQLITE Exit=0 par_sqlandworker_results $SQLITE Exit=0
par_sqlandworker_results $SQLITE Exit=0 par_sqlandworker_results $SQLITE Exit=0
par_sqlandworker_results $SQLITE Command|V1|V2|Stdout|Stderr par_sqlandworker_results $SQLITE Command|V1|V2|Stdout|Stderr
@ -1295,7 +1295,7 @@ par_sqlandworker_results $SQLITE sleep .3;echo 5 b|5|b|/tmp/out--sql/1/5/2/b/std
par_sqlandworker_results $SQLITE sleep .3;echo 5 c|5|c|/tmp/out--sql/1/5/2/c/stdout|/tmp/out--sql/1/5/2/c/stderr par_sqlandworker_results $SQLITE sleep .3;echo 5 c|5|c|/tmp/out--sql/1/5/2/c/stdout|/tmp/out--sql/1/5/2/c/stderr
par_sqlandworker_results $SQLITE sleep .3;echo 5 d|5|d|/tmp/out--sql/1/5/2/d/stdout|/tmp/out--sql/1/5/2/d/stderr par_sqlandworker_results $SQLITE sleep .3;echo 5 d|5|d|/tmp/out--sql/1/5/2/d/stdout|/tmp/out--sql/1/5/2/d/stderr
par_sqlandworker_results $SQLITE sleep .3;echo 5 e|5|e|/tmp/out--sql/1/5/2/e/stdout|/tmp/out--sql/1/5/2/e/stderr par_sqlandworker_results $SQLITE sleep .3;echo 5 e|5|e|/tmp/out--sql/1/5/2/e/stdout|/tmp/out--sql/1/5/2/e/stderr
par_sqlandworker_tag $MYSQL p_wrapper par_sqlandworker_tag \$MYSQL par_sqlandworker_tag $MYSQL p_wrapper par_sqlandworker_tag '$MYSQL'
par_sqlandworker_tag $MYSQL Exit=0 par_sqlandworker_tag $MYSQL Exit=0
par_sqlandworker_tag $MYSQL Exit=0 par_sqlandworker_tag $MYSQL Exit=0
par_sqlandworker_tag $MYSQL Command V1 V2 Stdout Stderr par_sqlandworker_tag $MYSQL Command V1 V2 Stdout Stderr
@ -1324,7 +1324,7 @@ par_sqlandworker_tag $MYSQL sleep .3;echo 5 b 5 b 5 b\t5 b\n
par_sqlandworker_tag $MYSQL sleep .3;echo 5 c 5 c 5 c\t5 c\n par_sqlandworker_tag $MYSQL sleep .3;echo 5 c 5 c 5 c\t5 c\n
par_sqlandworker_tag $MYSQL sleep .3;echo 5 d 5 d 5 d\t5 d\n par_sqlandworker_tag $MYSQL sleep .3;echo 5 d 5 d 5 d\t5 d\n
par_sqlandworker_tag $MYSQL sleep .3;echo 5 e 5 e 5 e\t5 e\n par_sqlandworker_tag $MYSQL sleep .3;echo 5 e 5 e 5 e\t5 e\n
par_sqlandworker_tag $PG p_wrapper par_sqlandworker_tag \$PG par_sqlandworker_tag $PG p_wrapper par_sqlandworker_tag '$PG'
par_sqlandworker_tag $PG Exit=0 par_sqlandworker_tag $PG Exit=0
par_sqlandworker_tag $PG Exit=0 par_sqlandworker_tag $PG Exit=0
par_sqlandworker_tag $PG command | v1 | v2 | stdout | stderr par_sqlandworker_tag $PG command | v1 | v2 | stdout | stderr
@ -1381,7 +1381,7 @@ par_sqlandworker_tag $PG sleep .3;echo 5 e | 5 | e | 5 e 5 e+|
par_sqlandworker_tag $PG | | | | par_sqlandworker_tag $PG | | | |
par_sqlandworker_tag $PG (25 rows) par_sqlandworker_tag $PG (25 rows)
par_sqlandworker_tag $PG par_sqlandworker_tag $PG
par_sqlandworker_tag $SQLITE p_wrapper par_sqlandworker_tag \$SQLITE par_sqlandworker_tag $SQLITE p_wrapper par_sqlandworker_tag '$SQLITE'
par_sqlandworker_tag $SQLITE Exit=0 par_sqlandworker_tag $SQLITE Exit=0
par_sqlandworker_tag $SQLITE Exit=0 par_sqlandworker_tag $SQLITE Exit=0
par_sqlandworker_tag $SQLITE Command|V1|V2|Stdout|Stderr par_sqlandworker_tag $SQLITE Command|V1|V2|Stdout|Stderr
@ -1435,7 +1435,7 @@ par_sqlandworker_tag $SQLITE sleep .3;echo 5 d|5|d|5 d 5 d
par_sqlandworker_tag $SQLITE | par_sqlandworker_tag $SQLITE |
par_sqlandworker_tag $SQLITE sleep .3;echo 5 e|5|e|5 e 5 e par_sqlandworker_tag $SQLITE sleep .3;echo 5 e|5|e|5 e 5 e
par_sqlandworker_tag $SQLITE | par_sqlandworker_tag $SQLITE |
par_sqlandworker_total_jobs $MYSQL p_wrapper par_sqlandworker_total_jobs \$MYSQL par_sqlandworker_total_jobs $MYSQL p_wrapper par_sqlandworker_total_jobs '$MYSQL'
par_sqlandworker_total_jobs $MYSQL Exit=0 par_sqlandworker_total_jobs $MYSQL Exit=0
par_sqlandworker_total_jobs $MYSQL Exit=0 par_sqlandworker_total_jobs $MYSQL Exit=0
par_sqlandworker_total_jobs $MYSQL Command V1 V2 Stdout Stderr par_sqlandworker_total_jobs $MYSQL Command V1 V2 Stdout Stderr
@ -1464,7 +1464,7 @@ par_sqlandworker_total_jobs $MYSQL echo 22 of 25; sleep .3;echo 5 b 22 of 25\n\n
par_sqlandworker_total_jobs $MYSQL echo 23 of 25; sleep .3;echo 5 c 23 of 25\n\n par_sqlandworker_total_jobs $MYSQL echo 23 of 25; sleep .3;echo 5 c 23 of 25\n\n
par_sqlandworker_total_jobs $MYSQL echo 24 of 25; sleep .3;echo 5 d 24 of 25\n\n par_sqlandworker_total_jobs $MYSQL echo 24 of 25; sleep .3;echo 5 d 24 of 25\n\n
par_sqlandworker_total_jobs $MYSQL echo 25 of 25; sleep .3;echo 5 e 25 of 25\n\n par_sqlandworker_total_jobs $MYSQL echo 25 of 25; sleep .3;echo 5 e 25 of 25\n\n
par_sqlandworker_total_jobs $PG p_wrapper par_sqlandworker_total_jobs \$PG par_sqlandworker_total_jobs $PG p_wrapper par_sqlandworker_total_jobs '$PG'
par_sqlandworker_total_jobs $PG Exit=0 par_sqlandworker_total_jobs $PG Exit=0
par_sqlandworker_total_jobs $PG Exit=0 par_sqlandworker_total_jobs $PG Exit=0
par_sqlandworker_total_jobs $PG command | v1 | v2 | stdout | stderr par_sqlandworker_total_jobs $PG command | v1 | v2 | stdout | stderr
@ -1546,7 +1546,7 @@ par_sqlandworker_total_jobs $PG | | |
par_sqlandworker_total_jobs $PG | | | | par_sqlandworker_total_jobs $PG | | | |
par_sqlandworker_total_jobs $PG (25 rows) par_sqlandworker_total_jobs $PG (25 rows)
par_sqlandworker_total_jobs $PG par_sqlandworker_total_jobs $PG
par_sqlandworker_total_jobs $SQLITE p_wrapper par_sqlandworker_total_jobs \$SQLITE par_sqlandworker_total_jobs $SQLITE p_wrapper par_sqlandworker_total_jobs '$SQLITE'
par_sqlandworker_total_jobs $SQLITE Exit=0 par_sqlandworker_total_jobs $SQLITE Exit=0
par_sqlandworker_total_jobs $SQLITE Exit=0 par_sqlandworker_total_jobs $SQLITE Exit=0
par_sqlandworker_total_jobs $SQLITE Command|V1|V2|Stdout|Stderr par_sqlandworker_total_jobs $SQLITE Command|V1|V2|Stdout|Stderr
@ -1625,7 +1625,7 @@ par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_total_jobs $SQLITE echo 25 of 25; sleep .3;echo|5|e|25 of 25 par_sqlandworker_total_jobs $SQLITE echo 25 of 25; sleep .3;echo|5|e|25 of 25
par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE
par_sqlandworker_total_jobs $SQLITE | par_sqlandworker_total_jobs $SQLITE |
par_sqlandworker_unbuffer $MYSQL p_wrapper par_sqlandworker_unbuffer \$MYSQL par_sqlandworker_unbuffer $MYSQL p_wrapper par_sqlandworker_unbuffer '$MYSQL'
par_sqlandworker_unbuffer $MYSQL Exit=0 par_sqlandworker_unbuffer $MYSQL Exit=0
par_sqlandworker_unbuffer $MYSQL Exit=0 par_sqlandworker_unbuffer $MYSQL Exit=0
par_sqlandworker_unbuffer $MYSQL Command V1 V2 Stdout Stderr par_sqlandworker_unbuffer $MYSQL Command V1 V2 Stdout Stderr
@ -1654,7 +1654,7 @@ par_sqlandworker_unbuffer $MYSQL sleep .3;echo 5 b 5 b
par_sqlandworker_unbuffer $MYSQL sleep .3;echo 5 c 5 c par_sqlandworker_unbuffer $MYSQL sleep .3;echo 5 c 5 c
par_sqlandworker_unbuffer $MYSQL sleep .3;echo 5 d 5 d par_sqlandworker_unbuffer $MYSQL sleep .3;echo 5 d 5 d
par_sqlandworker_unbuffer $MYSQL sleep .3;echo 5 e 5 e par_sqlandworker_unbuffer $MYSQL sleep .3;echo 5 e 5 e
par_sqlandworker_unbuffer $PG p_wrapper par_sqlandworker_unbuffer \$PG par_sqlandworker_unbuffer $PG p_wrapper par_sqlandworker_unbuffer '$PG'
par_sqlandworker_unbuffer $PG Exit=0 par_sqlandworker_unbuffer $PG Exit=0
par_sqlandworker_unbuffer $PG Exit=0 par_sqlandworker_unbuffer $PG Exit=0
par_sqlandworker_unbuffer $PG command | v1 | v2 | stdout | stderr par_sqlandworker_unbuffer $PG command | v1 | v2 | stdout | stderr
@ -1686,7 +1686,7 @@ par_sqlandworker_unbuffer $PG sleep .3;echo 5 d | 5 | d | |
par_sqlandworker_unbuffer $PG sleep .3;echo 5 e | 5 | e | | par_sqlandworker_unbuffer $PG sleep .3;echo 5 e | 5 | e | |
par_sqlandworker_unbuffer $PG (25 rows) par_sqlandworker_unbuffer $PG (25 rows)
par_sqlandworker_unbuffer $PG par_sqlandworker_unbuffer $PG
par_sqlandworker_unbuffer $SQLITE p_wrapper par_sqlandworker_unbuffer \$SQLITE par_sqlandworker_unbuffer $SQLITE p_wrapper par_sqlandworker_unbuffer '$SQLITE'
par_sqlandworker_unbuffer $SQLITE Exit=0 par_sqlandworker_unbuffer $SQLITE Exit=0
par_sqlandworker_unbuffer $SQLITE Exit=0 par_sqlandworker_unbuffer $SQLITE Exit=0
par_sqlandworker_unbuffer $SQLITE Command|V1|V2|Stdout|Stderr par_sqlandworker_unbuffer $SQLITE Command|V1|V2|Stdout|Stderr

File diff suppressed because it is too large Load diff

View file

@ -3,25 +3,25 @@ echo '### Test --load remote'
ssh parallel@lo 'seq 10 | parallel --nice 19 --timeout 15 -j0 -qN0 perl -e while\(1\)\{\ \}' & sleep 1; stdout /usr/bin/time -f %e parallel -S parallel@lo --load 10 sleep ::: 1 | perl -ne '$_ > 10 and print "OK\n"' ssh parallel@lo 'seq 10 | parallel --nice 19 --timeout 15 -j0 -qN0 perl -e while\(1\)\{\ \}' & sleep 1; stdout /usr/bin/time -f %e parallel -S parallel@lo --load 10 sleep ::: 1 | perl -ne '$_ > 10 and print "OK\n"'
OK OK
parallel: Warning: This job was killed because it timed out: parallel: Warning: This job was killed because it timed out:
parallel: Warning: perl -e while\(1\)\{\ \} parallel: Warning: perl -e 'while(1){ }' ''
parallel: Warning: This job was killed because it timed out: parallel: Warning: This job was killed because it timed out:
parallel: Warning: perl -e while\(1\)\{\ \} parallel: Warning: perl -e 'while(1){ }' ''
parallel: Warning: This job was killed because it timed out: parallel: Warning: This job was killed because it timed out:
parallel: Warning: perl -e while\(1\)\{\ \} parallel: Warning: perl -e 'while(1){ }' ''
parallel: Warning: This job was killed because it timed out: parallel: Warning: This job was killed because it timed out:
parallel: Warning: perl -e while\(1\)\{\ \} parallel: Warning: perl -e 'while(1){ }' ''
parallel: Warning: This job was killed because it timed out: parallel: Warning: This job was killed because it timed out:
parallel: Warning: perl -e while\(1\)\{\ \} parallel: Warning: perl -e 'while(1){ }' ''
parallel: Warning: This job was killed because it timed out: parallel: Warning: This job was killed because it timed out:
parallel: Warning: perl -e while\(1\)\{\ \} parallel: Warning: perl -e 'while(1){ }' ''
parallel: Warning: This job was killed because it timed out: parallel: Warning: This job was killed because it timed out:
parallel: Warning: perl -e while\(1\)\{\ \} parallel: Warning: perl -e 'while(1){ }' ''
parallel: Warning: This job was killed because it timed out: parallel: Warning: This job was killed because it timed out:
parallel: Warning: perl -e while\(1\)\{\ \} parallel: Warning: perl -e 'while(1){ }' ''
parallel: Warning: This job was killed because it timed out: parallel: Warning: This job was killed because it timed out:
parallel: Warning: perl -e while\(1\)\{\ \} parallel: Warning: perl -e 'while(1){ }' ''
parallel: Warning: This job was killed because it timed out: parallel: Warning: This job was killed because it timed out:
parallel: Warning: perl -e while\(1\)\{\ \} parallel: Warning: perl -e 'while(1){ }' ''
echo '**' echo '**'
** **
echo '### Stop if all hosts are filtered and there are no hosts left to run on' echo '### Stop if all hosts are filtered and there are no hosts left to run on'
@ -58,10 +58,6 @@ FOO=test_csh_filter
HOME=~ HOME=~
echo '** bug #41805 done' echo '** bug #41805 done'
** bug #41805 done ** bug #41805 done
echo '### Deal with long command lines on remote servers'
### Deal with long command lines on remote servers
perl -e 'print((("\""x5000)."\n")x26)' | parallel -j1 -S lo -N 10000 echo {} |wc
2 26 130026
echo '### Test bug #34241: --pipe should not spawn unneeded processes' echo '### Test bug #34241: --pipe should not spawn unneeded processes'
### Test bug #34241: --pipe should not spawn unneeded processes ### Test bug #34241: --pipe should not spawn unneeded processes
seq 5 | ssh csh@lo parallel -k --block 5 --pipe -j10 cat\\\;echo Block_end seq 5 | ssh csh@lo parallel -k --block 5 --pipe -j10 cat\\\;echo Block_end
@ -211,8 +207,8 @@ ls: cannot access 'bug46519.cc': No such file or directory
ls: cannot access 'bug46519.ccc': No such file or directory ls: cannot access 'bug46519.ccc': No such file or directory
echo '### Test --nice remote' echo '### Test --nice remote'
### Test --nice remote ### Test --nice remote
stdout parallel --nice 1 -S lo -vv 'PAR=a bash -c "echo \$PAR {}"' ::: b | perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-z/\\+=0-9]{500,}:base64:i;' stdout parallel --nice 1 -S lo -vv 'PAR=a bash -c "echo \$PAR {}"' ::: b | perl -pe 's/\S*parallel-server\S*/one-server/;s:="[0-9]+":="XXXXX":i;'
ssh lo -- exec perl -e @GNU_Parallel\\\=split/_/,\\\"use_IPC::Open3\\\;_use_MIME::Base64\\\"\\\;eval\\\"@GNU_Parallel\\\"\\\;\\\$chld\\\=\\\$SIG\\\{CHLD\\\}\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\"IGNORE\\\"\\\;my\\\$zip\\\=\\\(grep\\\{-x\\\$_\\\}\\\"/usr/local/bin/bzip2\\\"\\\)\\\[0\\\]\\\|\\\|\\\"bzip2\\\"\\\;open3\\\(\\\$in,\\\$out,\\\"\\\>\\\&STDERR\\\",\\\$zip,\\\"-dc\\\"\\\)\\\;if\\\(my\\\$perlpid\\\=fork\\\)\\\{close\\\$in\\\;\\\$eval\\\=join\\\"\\\",\\\<\\\$out\\\>\\\;close\\\$out\\\;\\\}else\\\{close\\\$out\\\;print\\\$in\\\(decode_base64\\\(join\\\"\\\",@ARGV\\\)\\\)\\\;close\\\$in\\\;exit\\\;\\\}wait\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\$chld\\\;eval\\\$eval\\\; base64; ssh lo -- exec 'perl -e '"'"'$ENV{"PARALLEL_PID"}="XXXXX";$ENV{"PARALLEL_SEQ"}="1";$bashfunc = "";@ARGV="PAR=a bash -c \"echo \\\$PAR b\"";$shell="$ENV{SHELL}";$tmpdir="/tmp/parallel-local-ssh1-tmpdir";$nice=1;do{$ENV{PARALLEL_TMP}=$tmpdir."/par".join"",map{(0..9,"a".."z","A".."Z")[rand(62)]}(1..5);}while(-e$ENV{PARALLEL_TMP});$SIG{CHLD}=sub{$done=1;};$pid=fork;unless($pid){eval{setpgrp};eval{setpriority(0,0,$nice)};exec$shell,"-c",($bashfunc."@ARGV");die"exec:$!\n";}do{$s=$s<1?0.001+$s*1.03:$s;select(undef,undef,undef,$s);}until($done||getppid==1);kill(SIGHUP,-${pid})unless$done;wait;exit($?&127?128+($?&127):1+$?>>8)'"'";
a b a b
echo '**' echo '**'
** **

View file

@ -90,14 +90,14 @@ par_tee_ssh 2
par_tee_ssh 3 par_tee_ssh 3
par_tee_ssh 3 par_tee_ssh 3
par_wd_no_such_dir ### --wd no-such-dir - csh par_wd_no_such_dir ### --wd no-such-dir - csh
par_wd_no_such_dir mkdir: cannot create directory '/no-such-dir': Permission denied par_wd_no_such_dir mkdir: cannot create directory /no-such-dir: Permission denied
par_wd_no_such_dir parallel: Cannot chdir to /no-such-dir par_wd_no_such_dir parallel: Cannot chdir to /no-such-dir
par_wd_no_such_dir Exit code 1 par_wd_no_such_dir Exit code 1
par_wd_no_such_dir ### --wd no-such-dir - tcsh par_wd_no_such_dir ### --wd no-such-dir - tcsh
par_wd_no_such_dir mkdir: cannot create directory '/no-such-dir': Permission denied par_wd_no_such_dir mkdir: cannot create directory /no-such-dir: Permission denied
par_wd_no_such_dir parallel: Cannot chdir to /no-such-dir par_wd_no_such_dir parallel: Cannot chdir to /no-such-dir
par_wd_no_such_dir Exit code 1 par_wd_no_such_dir Exit code 1
par_wd_no_such_dir ### --wd no-such-dir - bash par_wd_no_such_dir ### --wd no-such-dir - bash
par_wd_no_such_dir mkdir: cannot create directory '/no-such-dir': Permission denied par_wd_no_such_dir mkdir: cannot create directory /no-such-dir: Permission denied
par_wd_no_such_dir parallel: Cannot chdir to /no-such-dir par_wd_no_such_dir parallel: Cannot chdir to /no-such-dir
par_wd_no_such_dir Exit code 1 par_wd_no_such_dir Exit code 1

View file

@ -127,18 +127,18 @@ par_zsh_man exit value 2 should be 2
par_zsh_man Unknown option: no-such-option par_zsh_man Unknown option: no-such-option
par_zsh_man exit value 255 should be 255 par_zsh_man exit value 255 should be 255
par_zsh_funky par_zsh_funky
par_zsh_funky \\\\\\\\
par_zsh_funky  par_zsh_funky 
par_zsh_funky  par_zsh_funky 
par_zsh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky par_zsh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
par_zsh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky par_zsh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
par_zsh_funky space 6 par_zsh_funky space 6
par_zsh_funky space 6 par_zsh_funky space 6
par_zsh_funky ' '
par_zsh_funky '  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>'
par_zsh_funky 3 arg alias_works par_zsh_funky 3 arg alias_works
par_zsh_funky 3 arg alias_works_over_ssh par_zsh_funky 3 arg alias_works_over_ssh
par_zsh_funky Funky- par_zsh_funky Funky-
par_zsh_funky Funky- par_zsh_funky Funky-
par_zsh_funky \ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96>
par_zsh_funky assoc_val_a par_zsh_funky assoc_val_a
par_zsh_funky assoc_val_a par_zsh_funky assoc_val_a
par_zsh_funky function_works par_zsh_funky function_works
@ -368,7 +368,7 @@ par_tcsh_funky
par_tcsh_funky 3 arg alias_works par_tcsh_funky 3 arg alias_works
par_tcsh_funky 3 arg alias_works_over_ssh par_tcsh_funky 3 arg alias_works_over_ssh
par_tcsh_funky Funky-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky alias_var_works par_tcsh_funky Funky-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky alias_var_works
par_tcsh_funky Funky-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<EFBFBD><EFBFBD><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>-funky alias_var_works_over_ssh par_tcsh_funky Funky-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩-funky alias_var_works_over_ssh
par_tcsh_funky \\\\\\\\ \ \ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96> par_tcsh_funky \\\\\\\\ \ \ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96>
par_tcsh_funky func_echo: Command not found. par_tcsh_funky func_echo: Command not found.
par_tcsh_funky func_echo: Command not found. par_tcsh_funky func_echo: Command not found.
@ -474,10 +474,10 @@ par_sh_man exit value 2 should be 2
par_sh_man Unknown option: no-such-option par_sh_man Unknown option: no-such-option
par_sh_man exit value 255 should be 255 par_sh_man exit value 255 should be 255
par_sh_funky par_sh_funky
par_sh_funky ' '
par_sh_funky '  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>'
par_sh_funky 3 arg alias_works par_sh_funky 3 arg alias_works
par_sh_funky 3 arg alias_works_over_ssh par_sh_funky 3 arg alias_works_over_ssh
par_sh_funky \\\\\\\\
par_sh_funky \ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96>
par_sh_environment_too_big bug #50815: env_parallel should warn if the environment is too big par_sh_environment_too_big bug #50815: env_parallel should warn if the environment is too big
par_sh_environment_too_big OK_bigvar par_sh_environment_too_big OK_bigvar
par_sh_environment_too_big OK_bigvar_remote par_sh_environment_too_big OK_bigvar_remote
@ -681,16 +681,16 @@ par_mksh_man exit value 2 should be 2
par_mksh_man Unknown option: no-such-option par_mksh_man Unknown option: no-such-option
par_mksh_man exit value 255 should be 255 par_mksh_man exit value 255 should be 255
par_mksh_funky par_mksh_funky
par_mksh_funky \\\\\\\\
par_mksh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky par_mksh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
par_mksh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky par_mksh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
par_mksh_funky space 6 par_mksh_funky space 6
par_mksh_funky space 6 par_mksh_funky space 6
par_mksh_funky ' '
par_mksh_funky '  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>'
par_mksh_funky 3 arg alias_works par_mksh_funky 3 arg alias_works
par_mksh_funky 3 arg alias_works_over_ssh par_mksh_funky 3 arg alias_works_over_ssh
par_mksh_funky Funky- par_mksh_funky Funky-
par_mksh_funky Funky- par_mksh_funky Funky-
par_mksh_funky \ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96>
par_mksh_funky function_works par_mksh_funky function_works
par_mksh_funky function_works_over_ssh par_mksh_funky function_works_over_ssh
par_mksh_funky myvar works par_mksh_funky myvar works
@ -955,20 +955,25 @@ par_ksh_man arrays
par_ksh_man with = & " ! ' par_ksh_man with = & " ! '
par_ksh_man work, par_ksh_man work,
par_ksh_man too par_ksh_man too
par_ksh_man This may never work
par_ksh_man https://unix.stackexchange.com/questions/457031/extract-full-function-definitions
par_ksh_man /usr/bin/ksh: line 21: syntax error at line XXX: `{' unmatched
par_ksh_man /usr/bin/ksh: line 21: syntax error at line XXX: `{' unmatched
par_ksh_man /usr/bin/ksh: line 21: syntax error at line XXX: `{' unmatched
par_ksh_man exit value 2 should be 2 par_ksh_man exit value 2 should be 2
par_ksh_man Unknown option: no-such-option par_ksh_man Unknown option: no-such-option
par_ksh_man exit value 255 should be 255 par_ksh_man exit value 255 should be 255
par_ksh_funky par_ksh_funky
par_ksh_funky \\\\\\\\
par_ksh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky par_ksh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
par_ksh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky par_ksh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
par_ksh_funky space 6 par_ksh_funky space 6
par_ksh_funky space 6 par_ksh_funky space 6
par_ksh_funky ' '
par_ksh_funky '  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>'
par_ksh_funky 3 arg alias_works par_ksh_funky 3 arg alias_works
par_ksh_funky 3 arg alias_works_over_ssh par_ksh_funky 3 arg alias_works_over_ssh
par_ksh_funky Funky- par_ksh_funky Funky-
par_ksh_funky Funky- par_ksh_funky Funky-
par_ksh_funky \ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96>
par_ksh_funky assoc_val_a par_ksh_funky assoc_val_a
par_ksh_funky assoc_val_a par_ksh_funky assoc_val_a
par_ksh_funky function_works par_ksh_funky function_works
@ -1125,15 +1130,15 @@ par_fish_underscore aliases and arrays in functions work
par_fish_underscore aliases functions work par_fish_underscore aliases functions work
par_fish_underscore aliases functions work par_fish_underscore aliases functions work
par_fish_underscore ^ par_fish_underscore ^
par_fish_underscore in function 'myfunc' par_fish_underscore in function <EFBFBD>騦yfunc<EFBFBD><EFBFBD>
par_fish_underscore called on standard input par_fish_underscore called on standard input
par_fish_underscore with parameter list 'work' par_fish_underscore with parameter list <EFBFBD>菏ork<EFBFBD><EFBFBD>
par_fish_underscore par_fish_underscore
par_fish_underscore OK if ^^^^^^^^^^^^^^^^^ no myecho par_fish_underscore OK if ^^^^^^^^^^^^^^^^^ no myecho
par_fish_underscore ^ par_fish_underscore ^
par_fish_underscore in function 'myfunc' par_fish_underscore in function <EFBFBD>騦yfunc<EFBFBD><EFBFBD>
par_fish_underscore called on standard input par_fish_underscore called on standard input
par_fish_underscore with parameter list 'work' par_fish_underscore with parameter list <EFBFBD>菏ork<EFBFBD><EFBFBD>
par_fish_underscore par_fish_underscore
par_fish_underscore OK if ^^^^^^^^^^^^^^^^^ no myecho par_fish_underscore OK if ^^^^^^^^^^^^^^^^^ no myecho
par_fish_underscore ^ par_fish_underscore ^
@ -1218,12 +1223,14 @@ par_fish_funky
par_fish_funky par_fish_funky
par_fish_funky par_fish_funky
par_fish_funky par_fish_funky
par_fish_funky \\\\\\\\ \ \ \ \ \\\\\\\\\\\\\\ \ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96> par_fish_funky '   !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>'
par_fish_environment_too_big Not implemented par_fish_environment_too_big Not implemented
par_fish_env_parallel_session Not implemented par_fish_env_parallel_session Not implemented
par_fish_env_parallel bug #50435: Remote fifo broke in 20150522 par_fish_env_parallel bug #50435: Remote fifo broke in 20150522
par_fish_env_parallel data from stdin par_fish_env_parallel TODO fix env_parallel --fifo
par_fish_env_parallel OK par_fish_env_parallel 'end' outside of a block
par_fish_env_parallel fish: end
par_fish_env_parallel ^
par_fish_env_parallel data from stdin par_fish_env_parallel data from stdin
par_fish_env_parallel OK par_fish_env_parallel OK
par_fish_env_parallel $? is not the exit status. In fish, please use $status. par_fish_env_parallel $? is not the exit status. In fish, please use $status.
@ -1306,10 +1313,10 @@ par_dash_man exit value 2 should be 2
par_dash_man Unknown option: no-such-option par_dash_man Unknown option: no-such-option
par_dash_man exit value 255 should be 255 par_dash_man exit value 255 should be 255
par_dash_funky par_dash_funky
par_dash_funky ' '
par_dash_funky '  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>'
par_dash_funky 3 arg alias_works par_dash_funky 3 arg alias_works
par_dash_funky 3 arg alias_works_over_ssh par_dash_funky 3 arg alias_works_over_ssh
par_dash_funky \\\\\\\\
par_dash_funky \ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96>
par_dash_environment_too_big bug #50815: env_parallel should warn if the environment is too big par_dash_environment_too_big bug #50815: env_parallel should warn if the environment is too big
par_dash_environment_too_big OK_bigvar par_dash_environment_too_big OK_bigvar
par_dash_environment_too_big OK_bigvar_remote par_dash_environment_too_big OK_bigvar_remote
@ -1623,21 +1630,21 @@ par_bash_man exit value 2 should be 2
par_bash_man Unknown option: no-such-option par_bash_man Unknown option: no-such-option
par_bash_man exit value 255 should be 255 par_bash_man exit value 255 should be 255
par_bash_funky par_bash_funky
par_bash_funky \\\\\\\\
par_bash_funky  par_bash_funky 
par_bash_funky  par_bash_funky 
par_bash_funky -funkymultiline par_bash_funky -funkymultiline
par_bash_funky -funkymultiline par_bash_funky -funkymultiline
par_bash_funky space 6 par_bash_funky space 6
par_bash_funky space 6 par_bash_funky space 6
par_bash_funky ' '
par_bash_funky ' '
par_bash_funky '  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>'
par_bash_funky 3 arg alias_works par_bash_funky 3 arg alias_works
par_bash_funky 3 arg alias_works_over_ssh par_bash_funky 3 arg alias_works_over_ssh
par_bash_funky Funkyline-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funkyline par_bash_funky Funkyline-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funkyline
par_bash_funky Funkyline-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funkyline par_bash_funky Funkyline-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funkyline
par_bash_funky Funkymultiline- par_bash_funky Funkymultiline-
par_bash_funky Funkymultiline- par_bash_funky Funkymultiline-
par_bash_funky \ \ 
par_bash_funky \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96>
par_bash_funky assoc_val_a par_bash_funky assoc_val_a
par_bash_funky assoc_val_a par_bash_funky assoc_val_a
par_bash_funky function_works par_bash_funky function_works
@ -1848,10 +1855,10 @@ par_ash_man exit value 2 should be 2
par_ash_man Unknown option: no-such-option par_ash_man Unknown option: no-such-option
par_ash_man exit value 255 should be 255 par_ash_man exit value 255 should be 255
par_ash_funky par_ash_funky
par_ash_funky ' '
par_ash_funky '  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>'
par_ash_funky 3 arg alias_works par_ash_funky 3 arg alias_works
par_ash_funky 3 arg alias_works_over_ssh par_ash_funky 3 arg alias_works_over_ssh
par_ash_funky \\\\\\\\
par_ash_funky \ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96>
par_ash_environment_too_big bug #50815: env_parallel should warn if the environment is too big par_ash_environment_too_big bug #50815: env_parallel should warn if the environment is too big
par_ash_environment_too_big OK_bigvar par_ash_environment_too_big OK_bigvar
par_ash_environment_too_big OK_bigvar_remote par_ash_environment_too_big OK_bigvar_remote

View file

@ -1,5 +1,5 @@
par_PARALLEL_RSYNC_OPTS ### test rsync opts par_PARALLEL_RSYNC_OPTS ### test rsync opts
par_PARALLEL_RSYNC_OPTS rsync --protocol 30 -rlDzRRRRrsync --protocol 30 --rsync-path=cd\ ././.\;\ rsync -rlDzRRRRrsync --protocol 30 -zzrrllddRRRRrsync --protocol 30 --rsync-path=cd\ ././.\;\ rsync -zzrrllddRRRR par_PARALLEL_RSYNC_OPTS rsync --protocol 30 -rlDzRRRRrsync --protocol 30 --rsync-path='cd ././.; rsync' -rlDzRRRRrsync --protocol 30 -zzrrllddRRRRrsync --protocol 30 --rsync-path='cd ././.; rsync' -zzrrllddRRRR
par_bar_m ### test --bar -m par_bar_m ### test --bar -m
par_bar_m 0 par_bar_m 0
par_bar_m 50 par_bar_m 50

View file

@ -195,8 +195,8 @@ a_b_c_d
echo '### Test of --trim n' echo '### Test of --trim n'
### Test of --trim n ### Test of --trim n
(echo 'a% c %%b'; echo a%c% b %d) | parallel -k --trim n --colsep %+ echo '"{1}_{3}_{2}_{4}"' (echo 'a% c %%b'; echo a%c% b %d) | parallel -k --trim n --colsep %+ echo '"{1}_{3}_{2}_{4}"'
a_b_\ c\ _ a_b_' c '_
a_\ b\ _c_d a_' b '_c_d
parallel -k -C %+ echo '"{1}_{3}_{2}_{4}"' ::: 'a% c %%b' 'a%c% b %d' parallel -k -C %+ echo '"{1}_{3}_{2}_{4}"' ::: 'a% c %%b' 'a%c% b %d'
a_b_c_ a_b_c_
a_b_c_d a_b_c_d

View file

@ -1,8 +1,8 @@
04f23d767b301409aac59a612efcd727 - c17a7b2d20f81d751aa627d6ba14dcc9 -
There are 6246 dirs with 6246 files There are 6246 dirs with 6246 files
Removing files Removing files
643fe9e7808976565b33a6fbc932428b - 4599cfc9b33244e96b7bf5b4f40e73ea -
There are 6246 dirs with files There are 6246 dirs with files
Removing dirs Removing dirs
7d89b0dc655b91f358a5cee5f4b2d1d7 - 28030a604f2e7381b234bbff3b13be9d -
There are 1 dirs with files There are 1 dirs with files

View file

@ -89,7 +89,7 @@ from one to xoney
xargs: argument list too long xargs: argument list too long
stdsort parallel -k -i -s26 -0 echo from \{\} to x{}y < items-0.xi stdsort parallel -k -i -s26 -0 echo from \{\} to x{}y < items-0.xi
parallel: Error: Command line too long (42 >= 26) at input 0: parallel: Error: Command line too long (32 >= 26) at input 0:
echo '### -l -0 echo < ldata-0.xi' echo '### -l -0 echo < ldata-0.xi'
### -l -0 echo < ldata-0.xi ### -l -0 echo < ldata-0.xi
stdout xargs -l -0 echo < ldata-0.xi stdout xargs -l -0 echo < ldata-0.xi
@ -449,7 +449,7 @@ this plus that
stdout parallel -k -t -0 echo this plus that < space.xi stdout parallel -k -t -0 echo this plus that < space.xi
echo this plus that ' echo this plus that '
'\ \ \ \ \ '
' '
this plus that this plus that
@ -1212,7 +1212,7 @@ stdsort xargs -i -s26 echo from \{\} to x{}y < items.xi
from dumb to xdumby from dumb to xdumby
xargs: argument list too long xargs: argument list too long
stdsort parallel -k -i -s26 echo from \{\} to x{}y < items.xi stdsort parallel -k -i -s26 echo from \{\} to x{}y < items.xi
parallel: Error: Command line too long (36 >= 26) at input 0: parallel: Error: Command line too long (30 >= 26) at input 0:
echo '### -i__ echo FIRST __ IS OK < quotes.xi' echo '### -i__ echo FIRST __ IS OK < quotes.xi'
### -i__ echo FIRST __ IS OK < quotes.xi ### -i__ echo FIRST __ IS OK < quotes.xi
stdout xargs -i__ echo FIRST __ IS OK < quotes.xi stdout xargs -i__ echo FIRST __ IS OK < quotes.xi
@ -1344,7 +1344,7 @@ echo this plus that
this plus that this plus that
stdout parallel -k -t echo this plus that < space.xi stdout parallel -k -t echo this plus that < space.xi
echo this plus that '' echo this plus that ''
echo this plus that \ \ \ \ \ echo this plus that ' '
this plus that this plus that
this plus that this plus that
echo '### -n1 printf "@%s@\n" < empty.xi' echo '### -n1 printf "@%s@\n" < empty.xi'
@ -1366,7 +1366,7 @@ foo bar
echo baz ugh echo baz ugh
baz ugh baz ugh
stdout parallel -k -n2 -t echo < foobar.xi stdout parallel -k -n2 -t echo < foobar.xi
echo foo\ bar baz\ echo 'foo bar' 'baz '
echo ugh echo ugh
foo bar baz foo bar baz
ugh ugh

View file

@ -41,13 +41,13 @@ ls b
a a
a b a b
b b
ls ' ab '|wc;echo ' ab '
ls ' ab'|wc;echo ' ab'
ls 'a b'|wc;echo 'a b'
ls 1-col.txt.diff|wc;echo 1-col.txt.diff ls 1-col.txt.diff|wc;echo 1-col.txt.diff
ls 1-col.txt|wc;echo 1-col.txt ls 1-col.txt|wc;echo 1-col.txt
ls 2-col.txt.diff|wc;echo 2-col.txt.diff ls 2-col.txt.diff|wc;echo 2-col.txt.diff
ls 2-col.txt|wc;echo 2-col.txt ls 2-col.txt|wc;echo 2-col.txt
ls \ ab\ |wc;echo \ ab\
ls \ ab|wc;echo \ ab
ls a\ b|wc;echo a\ b
ls a|wc;echo a ls a|wc;echo a
ls b|wc;echo b ls b|wc;echo b
### Check that we can have more input than max procs (-j 0) - touch ### Check that we can have more input than max procs (-j 0) - touch
@ -62,7 +62,7 @@ touch more_than_5000-9997
touch more_than_5000-9998 touch more_than_5000-9998
touch more_than_5000-9999 touch more_than_5000-9999
### rm ### rm
ls | parallel -j500 'sleep 1; find {} -type f | perl -ne "END{print $..\" {}\n\"}"' | sort ls | parallel -j500 'sleep 1; find {} -type f | perl -ne "END{print $..\" "{=$_=pQ($_)=}"\n\"}"' | sort
1 1-col.txt 1 1-col.txt
1 1-col.txt.diff 1 1-col.txt.diff
1 2-col.txt 1 2-col.txt
@ -171,7 +171,7 @@ ls | parallel -j500 'sleep 1; find {} -type f | perl -ne "END{print $..\" {}\n\"
4 ab 4 ab
4 b 4 b
6 a 6 a
ls | parallel --group -j500 'sleep 1; find {} -type f | perl -ne "END{print $..\" {}\n\"}"' | sort ls | parallel --group -j500 'sleep 1; find {} -type f | perl -ne "END{print $..\" "{=$_=pQ($_)=}"\n\"}"' | sort
1 1-col.txt 1 1-col.txt
1 1-col.txt.diff 1 1-col.txt.diff
1 2-col.txt 1 2-col.txt
@ -318,24 +318,24 @@ find . -type f | parallel -v --group "perl -ne '/^\\S+\\s+\\S+$/ and print \$ARG
./a/bar.diff ./a/bar.diff
./b/bar.diff ./b/bar.diff
./b/bar.diff ./b/bar.diff
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' './ ab /c'"'"' d/ ef"g'
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' './ ab /c'"'"' d/ ef"g.diff'
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' './ ab/c"d/ef g'
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' './ ab/c"d/ef g.diff'
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' './ ab/c"d/efg'
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' './ ab/c"d/efg.diff'
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' './a b/cd / ef/efg'
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' './a b/cd / ef/efg.diff'
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./1-col.txt perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./1-col.txt
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./1-col.txt.diff perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./1-col.txt.diff
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./2-col.txt perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./2-col.txt
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./2-col.txt.diff perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./2-col.txt.diff
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./\ ab/c\"d/ef\ g
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./\ ab/c\"d/ef\ g.diff
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./\ ab/c\"d/efg
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./\ ab/c\"d/efg.diff
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./\ ab\ /c\'\ d/\ ef\"g
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./\ ab\ /c\'\ d/\ ef\"g.diff
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./a/bar perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./a/bar
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./a/bar.diff perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./a/bar.diff
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./a/foo perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./a/foo
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./a/foo.diff perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./a/foo.diff
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./a/foo2 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./a/foo2
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./a/foo2.diff perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./a/foo2.diff
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./a\ b/cd\ /\ ef/efg
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./a\ b/cd\ /\ ef/efg.diff
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./b/bar perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./b/bar
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./b/bar.diff perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./b/bar.diff
perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./b/foo perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./b/foo
@ -477,124 +477,124 @@ find . -type f | parallel -qv --group perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\
./a/bar.diff ./a/bar.diff
./b/bar.diff ./b/bar.diff
./b/bar.diff ./b/bar.diff
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./1-col.txt perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' './ ab /c'"'"' d/ ef"g'
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./1-col.txt.diff perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' './ ab /c'"'"' d/ ef"g.diff'
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./2-col.txt perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' './ ab/c"d/ef g'
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./2-col.txt.diff perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' './ ab/c"d/ef g.diff'
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./\ ab/c\"d/ef\ g perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' './ ab/c"d/efg'
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./\ ab/c\"d/ef\ g.diff perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' './ ab/c"d/efg.diff'
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./\ ab/c\"d/efg perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' './a b/cd / ef/efg'
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./\ ab/c\"d/efg.diff perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' './a b/cd / ef/efg.diff'
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./\ ab\ /c\'\ d/\ ef\"g perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./1-col.txt
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./\ ab\ /c\'\ d/\ ef\"g.diff perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./1-col.txt.diff
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./a/bar perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./2-col.txt
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./a/bar.diff perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./2-col.txt.diff
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./a/foo perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./a/bar
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./a/foo.diff perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./a/bar.diff
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./a/foo2 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./a/foo
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./a/foo2.diff perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./a/foo.diff
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./a\ b/cd\ /\ ef/efg perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./a/foo2
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./a\ b/cd\ /\ ef/efg.diff perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./a/foo2.diff
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./b/bar perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./b/bar
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./b/bar.diff perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./b/bar.diff
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./b/foo perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./b/foo
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./b/foo.diff perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./b/foo.diff
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9901 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9901
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9902 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9902
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9903 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9903
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9904 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9904
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9905 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9905
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9906 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9906
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9907 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9907
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9908 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9908
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9909 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9909
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9910 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9910
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9911 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9911
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9912 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9912
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9913 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9913
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9914 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9914
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9915 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9915
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9916 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9916
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9917 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9917
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9918 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9918
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9919 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9919
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9920 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9920
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9921 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9921
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9922 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9922
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9923 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9923
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9924 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9924
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9925 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9925
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9926 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9926
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9927 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9927
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9928 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9928
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9929 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9929
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9930 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9930
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9931 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9931
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9932 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9932
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9933 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9933
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9934 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9934
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9935 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9935
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9936 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9936
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9937 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9937
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9938 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9938
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9939 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9939
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9940 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9940
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9941 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9941
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9942 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9942
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9943 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9943
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9944 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9944
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9945 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9945
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9946 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9946
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9947 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9947
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9948 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9948
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9949 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9949
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9950 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9950
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9951 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9951
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9952 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9952
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9953 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9953
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9954 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9954
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9955 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9955
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9956 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9956
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9957 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9957
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9958 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9958
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9959 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9959
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9960 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9960
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9961 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9961
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9962 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9962
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9963 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9963
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9964 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9964
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9965 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9965
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9966 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9966
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9967 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9967
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9968 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9968
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9969 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9969
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9970 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9970
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9971 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9971
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9972 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9972
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9973 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9973
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9974 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9974
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9975 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9975
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9976 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9976
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9977 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9977
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9978 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9978
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9979 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9979
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9980 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9980
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9981 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9981
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9982 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9982
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9983 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9983
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9984 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9984
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9985 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9985
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9986 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9986
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9987 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9987
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9988 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9988
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9989 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9989
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9990 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9990
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9991 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9991
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9992 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9992
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9993 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9993
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9994 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9994
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9995 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9995
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9996 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9996
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9997 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9997
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9998 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9998
perl -ne /\^\\S+\\s+\\S+\$/\ and\ print\ \$ARGV,\"\\n\" ./more_than_5000-9999 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9999

View file

@ -210,13 +210,13 @@ echo '### Bug made 3 go before 1 2'
echo '### Bug did not quote' echo '### Bug did not quote'
### Bug did not quote ### Bug did not quote
echo '>' | parallel -v echo echo '>' | parallel -v echo
echo \> echo '>'
> >
parallel -v echo ::: '>' parallel -v echo ::: '>'
echo \> echo '>'
> >
(echo '>'; echo 2) | parallel -j1 -vX echo (echo '>'; echo 2) | parallel -j1 -vX echo
echo \> 2 echo '>' 2
> 2 > 2
parallel -X -j1 echo ::: '>' 2 parallel -X -j1 echo ::: '>' 2
> 2 > 2

View file

@ -317,5 +317,5 @@ ls: cannot access '*.par': No such file or directory
echo "bug: --gnu was ignored if env var started with space: PARALLEL=' --gnu'" echo "bug: --gnu was ignored if env var started with space: PARALLEL=' --gnu'"
bug: --gnu was ignored if env var started with space: PARALLEL=' --gnu' bug: --gnu was ignored if env var started with space: PARALLEL=' --gnu'
export PARALLEL=" -v" && parallel echo ::: 'space in envvar OK' export PARALLEL=" -v" && parallel echo ::: 'space in envvar OK'
echo space\ in\ envvar\ OK echo 'space in envvar OK'
space in envvar OK space in envvar OK

View file

@ -41,5 +41,5 @@ par_space_quote a \'"b 4
par_special_char a' * ? >o <i*? ][\!#¤%=( ) | }b 5 par_special_char a' * ? >o <i*? ][\!#¤%=( ) | }b 5
par_special_char a' * ? >o <i*? ][\!#¤%=( ) | }b 5 par_special_char a' * ? >o <i*? ][\!#¤%=( ) | }b 5
par_special_char a' * ? >o <i*? ][\!#¤%=( ) | }b 5 par_special_char a' * ? >o <i*? ][\!#¤%=( ) | }b 5
par_special_char a' * ? >o <i*? ][\!#¤%=( ) | }b 5 par_special_char a' * ? >o <i*? ][!#¤%=( ) | }b 5
par_special_char a' * ? >o <i*? ][\!#¤%=( ) | }b 5 par_special_char a' * ? >o <i*? ][!#¤%=( ) | }b 5

View file

@ -20,7 +20,7 @@ a
ls b|wc;echo b ls b|wc;echo b
4 4 26 4 4 26
b b
ls \ä\¸\­\å\\½\ \(Zh\Å\<5C>nggu\Ã\³\)|wc;echo \ä\¸\­\å\\½\ \(Zh\Å\<5C>nggu\Ã\³\) ls '中国 (Zhōngguó)'|wc;echo '中国 (Zhōngguó)'
4 12 118 4 12 118
中国 (Zhōngguó) 中国 (Zhōngguó)
1 1-col.diff 1 1-col.diff
@ -29,14 +29,14 @@ ls \
1 2-col.txt 1 2-col.txt
6 a 6 a
4 b 4 b
4 中国 (ZhÅ<68>ngguó) 4 '中国 (Zhōngguó)'
1 1-col.diff 1 1-col.diff
1 1-col.txt 1 1-col.txt
1 2-col.diff 1 2-col.diff
1 2-col.txt 1 2-col.txt
6 a 6 a
4 b 4 b
4 中国 (ZhÅ<68>ngguó) 4 '中国 (Zhōngguó)'
touch -- 1-col/abc-1-col-1-col touch -- 1-col/abc-1-col-1-col
touch -- 1-col/abc-1-col-1-col.diff touch -- 1-col/abc-1-col-1-col.diff
touch -- 1-col/abc-1-col-1-col.txt touch -- 1-col/abc-1-col-1-col.txt
@ -45,7 +45,7 @@ touch -- 2-col/abc-2-col-2-col.diff
touch -- 2-col/abc-2-col-2-col.txt touch -- 2-col/abc-2-col-2-col.txt
touch -- a/abc-a-a touch -- a/abc-a-a
touch -- b/abc-b-b touch -- b/abc-b-b
touch -- \ä\¸\­\å\\½\ \(Zh\Å\<5C>nggu\Ã\³\)/abc-\ä\¸\­\å\\½\ \(Zh\Å\<5C>nggu\Ã\³\)-\ä\¸\­\å\\½\ \(Zh\Å\<5C>nggu\Ã\³\) touch -- '中国 (Zhōngguó)'/abc-'中国 (Zhōngguó)'-'中国 (Zhōngguó)'
rm -- 1-col/abc-1-col-1-col rm -- 1-col/abc-1-col-1-col
rm -- 1-col/abc-1-col-1-col.diff rm -- 1-col/abc-1-col-1-col.diff
rm -- 1-col/abc-1-col-1-col.txt rm -- 1-col/abc-1-col-1-col.txt
@ -54,7 +54,7 @@ rm -- 2-col/abc-2-col-2-col.diff
rm -- 2-col/abc-2-col-2-col.txt rm -- 2-col/abc-2-col-2-col.txt
rm -- a/abc-a-a rm -- a/abc-a-a
rm -- b/abc-b-b rm -- b/abc-b-b
rm -- \ä\¸\­\å\\½\ \(Zh\Å\<5C>nggu\Ã\³\)/abc-\ä\¸\­\å\\½\ \(Zh\Å\<5C>nggu\Ã\³\)-\ä\¸\­\å\\½\ \(Zh\Å\<5C>nggu\Ã\³\) rm -- '中国 (Zhōngguó)'/abc-'中国 (Zhōngguó)'-'中国 (Zhōngguó)'
echo '### Test compress' echo '### Test compress'
### Test compress ### Test compress
seq 5 | parallel -j2 --tag --compress 'seq {} | pv -q -L 10' seq 5 | parallel -j2 --tag --compress 'seq {} | pv -q -L 10'

View file

@ -85,7 +85,7 @@ echo '### bug #42902: profiles containing arguments with space'
echo "--rpl 'FULLPATH chomp(\$_=\"/bin/bash=\".\`readlink -f \$_\`);' " > ~/.parallel/FULLPATH; parallel -JFULLPATH echo FULLPATH ::: $0 echo "--rpl 'FULLPATH chomp(\$_=\"/bin/bash=\".\`readlink -f \$_\`);' " > ~/.parallel/FULLPATH; parallel -JFULLPATH echo FULLPATH ::: $0
/bin/bash=/bin/bash /bin/bash=/bin/bash
PARALLEL="--rpl 'FULLPATH chomp(\$_=\"/bin/bash=\".\`readlink -f \$_\`);' -v" parallel echo FULLPATH ::: $0 PARALLEL="--rpl 'FULLPATH chomp(\$_=\"/bin/bash=\".\`readlink -f \$_\`);' -v" parallel echo FULLPATH ::: $0
echo /bin/bash\=/bin/bash echo '/bin/bash=/bin/bash'
/bin/bash=/bin/bash /bin/bash=/bin/bash
PARALLEL="--rpl 'FULLPATH chomp(\$_=\"/bin/bash=\".\`readlink -f \$_\`);' perl -e \'print \\\"@ARGV\\\n\\\"\' " parallel With script in \\\$PARALLEL FULLPATH ::: . PARALLEL="--rpl 'FULLPATH chomp(\$_=\"/bin/bash=\".\`readlink -f \$_\`);' perl -e \'print \\\"@ARGV\\\n\\\"\' " parallel With script in \\\$PARALLEL FULLPATH ::: .
With script in $PARALLEL /bin/bash=~/privat/parallel/testsuite With script in $PARALLEL /bin/bash=~/privat/parallel/testsuite

View file

@ -1,100 +1,58 @@
echo '### tmux-1.9' echo '### tmux-1.9'
### tmux-1.9 ### tmux-1.9
seq 000 100 | PARALLEL_TMUX=tmux-1.9 par_tmux seq 0000 10 1000 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0 0
seq 100 200 | PARALLEL_TMUX=tmux-1.9 par_tmux seq 1001 10 2000 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0 0
seq 200 300 | PARALLEL_TMUX=tmux-1.9 par_tmux seq 2001 10 3000 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0 0
seq 300 400 | PARALLEL_TMUX=tmux-1.9 par_tmux seq 3001 10 4000 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0 0
seq 400 500 | PARALLEL_TMUX=tmux-1.9 par_tmux seq 4001 10 4030 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0
seq 500 600 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0
seq 600 700 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0
seq 700 800 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0
seq 800 900 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0
seq 900 1000 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0
seq 1000 1100 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0
seq 1100 1200 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0
seq 1200 1300 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0
seq 1300 1400 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0
seq 1400 1500 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0
seq 1500 1600 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0
seq 1600 1700 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0
seq 1700 1800 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0
seq 1800 1900 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0
seq 1900 2000 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0
seq 2000 2018 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0 0
echo '### tmux-1.9 fails' echo '### tmux-1.9 fails'
### tmux-1.9 fails ### tmux-1.9 fails
echo 2019 | PARALLEL_TMUX=tmux-1.9 par_tmux echo 4036 | PARALLEL_TMUX=tmux-1.9 par_tmux
parallel: Error: Command line too long (4047 >= 4047) at input 0: 2019 parallel: Error: Command line too long (4047 >= 4047) at input 0: 4036
255 255
echo 2020 | PARALLEL_TMUX=tmux-1.9 par_tmux echo 4037 | PARALLEL_TMUX=tmux-1.9 par_tmux
parallel: Error: Command line too long (4049 >= 4047) at input 0: 2020 parallel: Error: Command line too long (4048 >= 4047) at input 0: 4037
255 255
echo 2021 | PARALLEL_TMUX=tmux-1.9 par_tmux echo 4038 | PARALLEL_TMUX=tmux-1.9 par_tmux
parallel: Error: Command line too long (4051 >= 4047) at input 0: 2021 parallel: Error: Command line too long (4049 >= 4047) at input 0: 4038
255 255
echo '### tmux-1.8' echo '### tmux-1.8'
### tmux-1.8 ### tmux-1.8
seq 1 100 | PARALLEL_TMUX=tmux-1.8 par_tmux seq 1 5 100 | PARALLEL_TMUX=tmux-1.8 par_tmux
See output with: tmux-1.8 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach See output with: tmux-1.8 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0 0
seq 101 200 | PARALLEL_TMUX=tmux-1.8 par_tmux seq 101 5 200 | PARALLEL_TMUX=tmux-1.8 par_tmux
See output with: tmux-1.8 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach See output with: tmux-1.8 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0 0
seq 201 231 | PARALLEL_TMUX=tmux-1.8 par_tmux seq 201 5 300 | PARALLEL_TMUX=tmux-1.8 par_tmux
See output with: tmux-1.8 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0
seq 301 5 400 | PARALLEL_TMUX=tmux-1.8 par_tmux
See output with: tmux-1.8 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0
seq 401 5 460 | PARALLEL_TMUX=tmux-1.8 par_tmux
See output with: tmux-1.8 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach See output with: tmux-1.8 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0 0
echo '### tmux-1.8 fails' echo '### tmux-1.8 fails'
### tmux-1.8 fails ### tmux-1.8 fails
echo 232 | PARALLEL_TMUX=tmux-1.8 par_tmux echo 462 | PARALLEL_TMUX=tmux-1.8 par_tmux
parallel: Error: Command line too long (472 >= 472) at input 0: 232 parallel: Error: Command line too long (472 >= 472) at input 0: 462
255 255
echo 233 | PARALLEL_TMUX=tmux-1.8 par_tmux echo 463 | PARALLEL_TMUX=tmux-1.8 par_tmux
parallel: Error: Command line too long (474 >= 472) at input 0: 233 parallel: Error: Command line too long (473 >= 472) at input 0: 463
255 255
echo 234 | PARALLEL_TMUX=tmux-1.8 par_tmux echo 464 | PARALLEL_TMUX=tmux-1.8 par_tmux
parallel: Error: Command line too long (476 >= 472) at input 0: 234 parallel: Error: Command line too long (474 >= 472) at input 0: 464
255 255
echo '### tmux-1.8 0..255 ascii' echo '### tmux-1.8 0..255 ascii'
### tmux-1.8 0..255 ascii ### tmux-1.8 0..255 ascii
@ -115,7 +73,6 @@ echo '### Test critical lengths. Must not block'
### Test critical lengths. Must not block ### Test critical lengths. Must not block
seq 140 260 | PARALLEL_TMUX=tmux-1.8 stdout parallel --tmux echo '{}{=$_="&"x$_=}' | par_tmux_filter seq 140 260 | PARALLEL_TMUX=tmux-1.8 stdout parallel --tmux echo '{}{=$_="&"x$_=}' | par_tmux_filter
See output with: tmux-1.8 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach See output with: tmux-1.8 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
parallel: Error: Command line too long (472 >= 472) at input 0: 232
seq 140 260 | PARALLEL_TMUX=tmux-1.9 stdout parallel --tmux echo '{}{=$_="&"x$_=}' | par_tmux_filter seq 140 260 | PARALLEL_TMUX=tmux-1.9 stdout parallel --tmux echo '{}{=$_="&"x$_=}' | par_tmux_filter
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
seq 560 850 | PARALLEL_TMUX=tmux-1.8 stdout parallel --tmux echo '{}{=$_="a"x$_=}' | par_tmux_filter seq 560 850 | PARALLEL_TMUX=tmux-1.8 stdout parallel --tmux echo '{}{=$_="a"x$_=}' | par_tmux_filter

View file

@ -64,17 +64,6 @@ echo '### Test --spreadstdin -k'; nice seq 1 1000000 | $NICEPAR -k --recend "\
echo '### Test --spreadstdin --files'; nice seq 1 1000000 | shuf | $NICEPAR --files --recend "\n" -j10 --spreadstdin sort -n | parallel -Xj1 sort -nm {} ";"rm {} | md5sum echo '### Test --spreadstdin --files'; nice seq 1 1000000 | shuf | $NICEPAR --files --recend "\n" -j10 --spreadstdin sort -n | parallel -Xj1 sort -nm {} ";"rm {} | md5sum
### Test --spreadstdin --files ### Test --spreadstdin --files
8a7095c1c23bfadc311fe6b16d950582 - 8a7095c1c23bfadc311fe6b16d950582 -
echo '### Test --number-of-cpus'; stdout $NICEPAR --number-of-cpus
### Test --number-of-cpus
1
echo '### Test --number-of-cores'; stdout $NICEPAR --number-of-cores
### Test --number-of-cores
2
echo '### Test --use-cpus-instead-of-cores'; (seq 1 8 | stdout parallel --use-cpus-instead-of-cores -j100% sleep) && echo CPUs done & (seq 1 8 | stdout parallel -j100% sleep) && echo cores done & echo 'Cores should complete first on machines with less than 8 physical CPUs'; wait
### Test --use-cpus-instead-of-cores
Cores should complete first on machines with less than 8 physical CPUs
cores done
CPUs done
echo '### Test --tag ::: a ::: b'; stdout $NICEPAR -k --tag -j1 echo stderr-{.} ">&2;" echo stdout-{} ::: a ::: b echo '### Test --tag ::: a ::: b'; stdout $NICEPAR -k --tag -j1 echo stderr-{.} ">&2;" echo stdout-{} ::: a ::: b
### Test --tag ::: a ::: b ### Test --tag ::: a ::: b
a b stdout-a b a b stdout-a b
@ -313,31 +302,31 @@ b
echo '### Quote test triplet 2' echo '### Quote test triplet 2'
### Quote test triplet 2 ### Quote test triplet 2
$XAP -kv echo :::: <(echo 'echo a'; echo 'echo b') $XAP -kv echo :::: <(echo 'echo a'; echo 'echo b')
echo echo\ a echo 'echo a'
echo a echo a
echo echo\ b echo 'echo b'
echo b echo b
$XAP -kv -a <(echo 'echo a'; echo 'echo b') echo $XAP -kv -a <(echo 'echo a'; echo 'echo b') echo
echo echo\ a echo 'echo a'
echo a echo a
echo echo\ b echo 'echo b'
echo b echo b
(echo 'echo a'; echo 'echo b') | $XAP -kv echo (echo 'echo a'; echo 'echo b') | $XAP -kv echo
echo echo\ a echo 'echo a'
echo a echo a
echo echo\ b echo 'echo b'
echo b echo b
echo '### Quoting if there is a command and 2 arg files' echo '### Quoting if there is a command and 2 arg files'
### Quoting if there is a command and 2 arg files ### Quoting if there is a command and 2 arg files
$XAP -kv echo :::: <(echo 'echo a') <(echo 'echo b') $XAP -kv echo :::: <(echo 'echo a') <(echo 'echo b')
echo echo\ a echo\ b echo 'echo a' 'echo b'
echo a echo b echo a echo b
echo '### Quoting if there is a command and 2 arg files of uneven length' echo '### Quoting if there is a command and 2 arg files of uneven length'
### Quoting if there is a command and 2 arg files of uneven length ### Quoting if there is a command and 2 arg files of uneven length
$XAP -kv echo :::: <(echo 'echo a';echo a1) <(echo 'echo b') $XAP -kv echo :::: <(echo 'echo a';echo a1) <(echo 'echo b')
echo echo\ a echo\ b echo 'echo a' 'echo b'
echo a echo b echo a echo b
echo a1 echo\ b echo a1 'echo b'
a1 echo b a1 echo b
echo '### Quoting if there is no command and 2 arg files' echo '### Quoting if there is no command and 2 arg files'
### Quoting if there is no command and 2 arg files ### Quoting if there is no command and 2 arg files