diff --git a/src/env_parallel.ash b/src/env_parallel.ash
index 1980e0fc..20b74ee3 100755
--- a/src/env_parallel.ash
+++ b/src/env_parallel.ash
@@ -124,6 +124,7 @@ env_parallel() {
# ll is an alias for ls -l (in ash)
# bash is a tracked alias for /bin/bash
# true is a shell builtin
+ # myfunc is a function
# which is /usr/bin/which
# which is hashed (/usr/bin/which)
# aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
@@ -131,6 +132,7 @@ env_parallel() {
type "$@" |
perl -pe '$exit += (s/ is an alias for .*// ||
s/ is aliased to .*// ||
+ s/ is a function// ||
s/ is a shell builtin// ||
s/.* is hashed .(\S+).$/$1/ ||
s/.* is (a tracked alias for )?//);
@@ -193,7 +195,6 @@ env_parallel() {
$_list_function_BODIES;
$_list_variable_VALUES;
`"
-
export PARALLEL_ENV
unset _list_alias_BODIES
unset _list_variable_VALUES
@@ -202,7 +203,7 @@ env_parallel() {
unset _ignore_UNDERSCORE
# Test if environment is too big
if `_which true` >/dev/null 2>/dev/null ; then
- `_which parallel` "$@";
+ parallel "$@";
_parallel_exit_CODE=$?
unset PARALLEL_ENV;
return $_parallel_exit_CODE
diff --git a/src/env_parallel.bash b/src/env_parallel.bash
index 98a4cc2a..08083093 100755
--- a/src/env_parallel.bash
+++ b/src/env_parallel.bash
@@ -143,14 +143,20 @@ env_parallel() {
}
_which() {
# type returns:
+ # ll is an alias for ls -l (in ash)
# bash is a tracked alias for /bin/bash
# true is a shell builtin
+ # myfunc is a function (in bash)
+ # myfunc is a shell function (in zsh)
# which is /usr/bin/which
# which is hashed (/usr/bin/which)
# aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
# Return 0 if found, 1 otherwise
type "$@" |
- perl -pe '$exit += (s/ is aliased to .*// ||
+ perl -pe '$exit += (s/ is an alias for .*// ||
+ s/ is aliased to .*// ||
+ s/ is a function// ||
+ s/ is a shell function// ||
s/ is a shell builtin// ||
s/.* is hashed .(\S+).$/$1/ ||
s/.* is (a tracked alias for )?//);
@@ -230,7 +236,7 @@ env_parallel() {
unset _ignore_UNDERSCORE
# Test if environment is too big
if [ "`_which true`" == "$_which_true" ] ; then
- `_which parallel` "$@";
+ parallel "$@";
_parallel_exit_CODE=$?
unset PARALLEL_ENV;
return $_parallel_exit_CODE
diff --git a/src/env_parallel.dash b/src/env_parallel.dash
index 997a6772..d006fad9 100755
--- a/src/env_parallel.dash
+++ b/src/env_parallel.dash
@@ -124,6 +124,7 @@ env_parallel() {
# ll is an alias for ls -l (in ash)
# bash is a tracked alias for /bin/bash
# true is a shell builtin
+ # myfunc is a function
# which is /usr/bin/which
# which is hashed (/usr/bin/which)
# aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
@@ -131,6 +132,7 @@ env_parallel() {
type "$@" |
perl -pe '$exit += (s/ is an alias for .*// ||
s/ is aliased to .*// ||
+ s/ is a function// ||
s/ is a shell builtin// ||
s/.* is hashed .(\S+).$/$1/ ||
s/.* is (a tracked alias for )?//);
@@ -193,7 +195,6 @@ env_parallel() {
$_list_function_BODIES;
$_list_variable_VALUES;
`"
-
export PARALLEL_ENV
unset _list_alias_BODIES
unset _list_variable_VALUES
@@ -202,7 +203,7 @@ env_parallel() {
unset _ignore_UNDERSCORE
# Test if environment is too big
if `_which true` >/dev/null 2>/dev/null ; then
- `_which parallel` "$@";
+ parallel "$@";
_parallel_exit_CODE=$?
unset PARALLEL_ENV;
return $_parallel_exit_CODE
diff --git a/src/env_parallel.sh b/src/env_parallel.sh
index e422d8ae..ed77bbe9 100755
--- a/src/env_parallel.sh
+++ b/src/env_parallel.sh
@@ -124,6 +124,7 @@ env_parallel() {
# ll is an alias for ls -l (in ash)
# bash is a tracked alias for /bin/bash
# true is a shell builtin
+ # myfunc is a function
# which is /usr/bin/which
# which is hashed (/usr/bin/which)
# aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
@@ -131,6 +132,7 @@ env_parallel() {
type "$@" |
perl -pe '$exit += (s/ is an alias for .*// ||
s/ is aliased to .*// ||
+ s/ is a function// ||
s/ is a shell builtin// ||
s/.* is hashed .(\S+).$/$1/ ||
s/.* is (a tracked alias for )?//);
@@ -193,7 +195,6 @@ env_parallel() {
$_list_function_BODIES;
$_list_variable_VALUES;
`"
-
export PARALLEL_ENV
unset _list_alias_BODIES
unset _list_variable_VALUES
@@ -202,7 +203,7 @@ env_parallel() {
unset _ignore_UNDERSCORE
# Test if environment is too big
if `_which true` >/dev/null 2>/dev/null ; then
- `_which parallel` "$@";
+ parallel "$@";
_parallel_exit_CODE=$?
unset PARALLEL_ENV;
return $_parallel_exit_CODE
diff --git a/src/env_parallel.zsh b/src/env_parallel.zsh
index eb955e9d..7a2712da 100755
--- a/src/env_parallel.zsh
+++ b/src/env_parallel.zsh
@@ -94,6 +94,30 @@ env_parallel() {
print $vars ? "($vars)" : "(.*)";
' -- "$@"
}
+ _which() {
+ # type returns:
+ # ll is an alias for ls -l (in ash)
+ # bash is a tracked alias for /bin/bash
+ # true is a shell builtin
+ # myfunc is a function (in bash)
+ # myfunc is a shell function (in zsh)
+ # which is /usr/bin/which
+ # which is hashed (/usr/bin/which)
+ # aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
+ # Return 0 if found, 1 otherwise
+ type "$@" |
+ perl -pe '$exit += (s/ is an alias for .*// ||
+ s/ is aliased to .*// ||
+ s/ is a function// ||
+ s/ is a shell function// ||
+ s/ is a shell builtin// ||
+ s/.* is hashed .(\S+).$/$1/ ||
+ s/.* is (a tracked alias for )?//);
+ END { exit not $exit }'
+ }
+ _warning() {
+ echo "env_parallel: Warning: $@" >&2
+ }
if which parallel | grep 'no parallel in' >/dev/null; then
echo 'env_parallel: Error: parallel must be in $PATH.' >&2
@@ -162,8 +186,8 @@ env_parallel() {
unset _grep_REGEXP
unset _ignore_UNDERSCORE
# Test if environment is too big
- if `which /bin/true` >/dev/null 2>/dev/null ; then
- `which parallel` "$@";
+ if `_which /bin/true` >/dev/null 2>/dev/null ; then
+ parallel "$@";
_parallel_exit_CODE=$?
unset PARALLEL_ENV;
return $_parallel_exit_CODE
@@ -227,8 +251,8 @@ _parset_main() {
}
exit $exitval;
' || return 255
- if echo "$_parset_name" | grep -E ',| ' >/dev/null ; then
- # $1 contains , or space
+ if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then
+ # $_parset_name contains , or space
# Split on , or space to get the names
eval "$(
# Compute results into files
@@ -241,9 +265,9 @@ _parset_main() {
)
)"
else
- # $1 contains no space or ,
- # => $1 is the name of the array to put data into
- # Supported in: bash
+ # $_parset_name does not contain , or space
+ # => $_parset_name is the name of the array to put data into
+ # Supported in: bash zsh ksh
# Arrays do not work in: ash dash
eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" |
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )"
diff --git a/src/niceload b/src/niceload
index b723b75f..ce9ed3dd 100755
--- a/src/niceload
+++ b/src/niceload
@@ -24,7 +24,7 @@
use strict;
use Getopt::Long;
$Global::progname="niceload";
-$Global::version = 20180122;
+$Global::version = 20180123;
Getopt::Long::Configure("bundling","require_order");
get_options_from_array(\@ARGV) || die_usage();
if($opt::version) {
diff --git a/src/parallel b/src/parallel
index d0734eed..7411c852 100755
--- a/src/parallel
+++ b/src/parallel
@@ -134,7 +134,6 @@ drain_job_queue();
::debug("init", "Done draining\n");
reaper();
::debug("init", "Done reaping\n");
-::debug("init", "Cleaning\n");
if($Global::semaphore) {
$sem->release();
}
@@ -183,8 +182,12 @@ sub set_input_source_header {
}
sub max_jobs_running {
+ # Compute $Global::max_jobs_running as the max number of jobs
+ # running on each sshlogin.
+ # Returns:
+ # $Global::max_jobs_running
if(not $Global::max_jobs_running) {
- # Compute $Global::max_jobs_running
+
for my $sshlogin (values %Global::host) {
$sshlogin->max_jobs_running();
}
@@ -193,6 +196,9 @@ sub max_jobs_running {
}
sub halt {
+ # Compute exit value,
+ # wait for children to complete
+ # and exit
if($opt::halt and $Global::halt_when ne "never") {
if(not defined $Global::halt_exitstatus) {
if($Global::halt_pct) {
@@ -212,6 +218,12 @@ sub halt {
sub __PIPE_MODE__ {}
sub pipepart_setup {
+ # Compute the blocksize
+ # Generate the commands to extract the blocks
+ # Push the commands on queue
+ # Changes:
+ # @Global::cat_prepends
+ # $Global::JobQueue
if($opt::tee) {
# Prepend each command with
# cat file
@@ -256,31 +268,39 @@ sub pipepart_setup {
}
sub pipe_tee_setup {
- # mkfifo t1..5
+ # Create temporary fifos
+ # Run 'tee fifo1 fifo2 fifo3 ... fifoN' in the background
+ # This will spread the input to fifos
+ # Generate commands that reads from fifo1..N:
+ # cat fifo | user_command
+ # Changes:
+ # @Global::cat_prepends
my @fifos;
for(1..$Global::JobQueue->total_jobs()) {
push @fifos, tmpfifo();
}
- # cat foo | tee t1 t2 t3 t4 t5 > /dev/null
+ # cat foo | tee fifo1 fifo2 fifo3 fifo4 fifo5 > /dev/null
if(not fork()){
# Let tee inherit our stdin
# and redirect stdout to null
open STDOUT, ">","/dev/null";
exec "tee",@fifos;
}
-
# Make cats for each fifo
- # cat t1 | grep 1
- # cat t2 | grep 2
- # cat t3 | grep 3
- # cat t4 | grep 4
- # cat t5 | grep 5
+ # cat fifo1 | grep 1
+ # cat fifo2 | grep 2
+ # cat fifo3 | grep 3
+ # cat fifo4 | grep 4
+ # cat fifo5 | grep 5
# Remove the tmpfifo as soon as it is open
# 'exec' saves a process
@Global::cat_prepends = map { "(rm $_; exec cat) < $_" } @fifos;
}
sub pipe_part_files {
+ # Given the bigfile
+ # find header and split positions
+ # make commands that 'cat's the partial file
# Input:
# $file = the file to read
# Returns:
@@ -304,6 +324,7 @@ sub pipe_part_files {
}
sub find_header {
+ # Compute the header based on $opt::header
# Input:
# $buf_ref = reference to read-in buffer
# $fh = filehandle to read from
@@ -329,6 +350,7 @@ sub find_header {
}
sub find_split_positions {
+ # Find positions in bigfile where recend is followed by recstart
# Input:
# $file = the file to read
# $block = (minimal) --block-size of each chunk
@@ -356,8 +378,10 @@ sub find_split_positions {
for(my $pos = $block+$headerlen; $pos < $size; $pos += $block) {
my $buf;
if($recendrecstart eq "") {
+ # records ends anywhere
push(@pos,$pos);
} else {
+ # Seek the the block start
seek($fh, $pos, 0) || die;
while(read($fh,substr($buf,length $buf,0),$dd_block_size)) {
if($opt::regexp) {
@@ -389,6 +413,7 @@ sub find_split_positions {
}
sub cat_partial {
+ # Efficient command to copy from byte X to byte Y
# Input:
# $file = the file to read
# ($start, $end, [$start2, $end2, ...]) = start byte, end byte
@@ -396,7 +421,7 @@ sub cat_partial {
# Efficient command to copy $start..$end, $start2..$end2, ... to stdout
my($file, @start_end) = @_;
my($start, $i);
- # Convert start_end to start_len
+ # Convert (start,end) to (start,len)
my @start_len = map {
if(++$i % 2) { $start = $_; } else { $_-$start }
} @start_end;
@@ -1049,6 +1074,7 @@ sub options_hash {
"pipepart|pipe-part" => \$opt::pipepart,
"tee" => \$opt::tee,
"hgrp|hostgrp|hostgroup|hostgroups" => \$opt::hostgroups,
+ "embed" => \$opt::embed,
);
}
@@ -1117,6 +1143,7 @@ sub parse_options {
wait_and_exit(255);
}
$Global::cshell = $Global::shell =~ m:/csh:;
+
if(defined $opt::X) { $Global::ContextReplace = 1; }
if(defined $opt::silent) { $Global::verbose = 0; }
if(defined $opt::null) { $/ = "\0"; }
@@ -1141,6 +1168,7 @@ sub parse_options {
$ENV{'PARALLEL_RSYNC_OPTS'} || '-rlDzR';
$opt::nice ||= 0;
if(defined $opt::help) { usage(); exit(0); }
+ if(defined $opt::embed) { embed(); exit(0); }
if(defined $opt::sqlandworker) {
$opt::sqlmaster = $opt::sqlworker = $opt::sqlandworker;
}
@@ -1388,7 +1416,7 @@ sub check_invalid_option_combinations {
sub init_globals {
# Defaults:
- $Global::version = 20180122;
+ $Global::version = 20180123;
$Global::progname = 'parallel';
$Global::infinity = 2**31;
$Global::debug = 0;
@@ -4246,6 +4274,79 @@ sub show_limits {
"press CTRL-D or CTRL-C\n");
}
+sub embed {
+ # Give an embeddable version of GNU Parallel
+ # Tested with: bash, zsh, ksh, ash, dash, sh
+ my $randomstring = "cut-here-".join"",
+ map { (0..9,"a".."z","A".."Z")[rand(62)] } (1..30);
+ if(not -f $0 or not -r $0) {
+ ::error("--embed only works if parallel is a readable file");
+ exit(255);
+ }
+ if(open(my $fh, "<", $0)) {
+ # Read the source from $0
+ # Remove comments and indention to save space
+ my @source = map { s/^\s+//;$_ } grep {!/^\s*#[^!]/} <$fh>;
+ my $user = $ENV{LOGNAME} || $ENV{USERNAME} || $ENV{USER};
+ print "#!$Global::shell
+
+# Copyright (C) 2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,
+# 2017,2018 $user, Ole Tange and Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see
+# or write to the Free Software Foundation, Inc., 51 Franklin St,
+# Fifth Floor, Boston, MA 02110-1301 USA
+";
+ if($Global::shell =~ m:/bash|/ksh|/zsh:) {
+ print"
+# Embedded GNU Parallel created with --embed
+# Define parallel function
+parallel() {
+perl <(cat <<'$randomstring'
+",@source,"
+$randomstring
+) \"\$@\"
+}
+
+# This will call the function above
+parallel -k echo ::: Put your code here
+";
+ } elsif($Global::shell =~ m:/ash|/dash|/sh:) {
+ print "
+# Embedded GNU Parallel created with --embed
+# Make temporary file with the source code
+parallel_program=\`tempfile\`
+cat <<'$randomstring' > \$parallel_program
+",@source,"
+$randomstring
+chmod +x \$parallel_program
+alias parallel=\$parallel_program
+
+# This will call the alias above
+parallel -k echo ::: Put your code here
+
+# Cleanup
+rm \$parallel_program
+"
+ }
+ } else {
+ ::error("Cannot open $0");
+ exit(255);
+ }
+ ::status("Redirect the output to a file and add your changes at the end:",
+ " $0 --embed > new_script");
+}
sub __GENERIC_COMMON_FUNCTION__ {}
@@ -4516,8 +4617,12 @@ sub spacefree {
my $spaces = shift;
my $s = shift;
$s =~ s/#.*//mg;
- if($spaces) {
+ if(1 == $spaces) {
$s =~ s/\s+/ /mg;
+ } elsif(2 == $spaces) {
+ # Keep newlines
+ $s =~ s/\n\n+/\n/sg;
+ $s =~ s/[ \t]+/ /mg;
} else {
$s =~ s/\s//mg;
}
diff --git a/src/parallel.pod b/src/parallel.pod
index b525b300..21e47461 100644
--- a/src/parallel.pod
+++ b/src/parallel.pod
@@ -646,6 +646,20 @@ If I is omitted, there is no end of file string. If neither
B<-E> nor B<-e> is used, no end of file string is used.
+=item B<--embed> (alpha testing)
+
+Embed GNU B in a shell script. If you need to distribute your
+script to someone who does not want to install GNU B you can
+embed GNU B in your own shell script:
+
+ parallel --embed > new_script
+
+After which you add your code at the end of B. This is tested
+on B, B, B, B, B, and B.
+
+It is not compatible with B, B, and B.
+
+
=item B<--env> I
Copy environment variable I. This will copy I to the
@@ -2091,7 +2105,6 @@ contain the same information as B<--joblog>, the values from the input
sources (stored in columns V1 .. Vn), and the output (stored in
columns Stdout and Stderr).
-
If I is prepended with '+' GNU B assumes the table is
already made with the correct columns and appends the jobs to it.
@@ -2354,13 +2367,13 @@ different dir for the files. Setting B<--tmpdir> is equivalent to
setting $TMPDIR.
-=item B<--tmux>
+=item B<--tmux> (Long beta testing)
Use B for output. Start a B session and run each job in a
window in that session. No other output will be produced.
-=item B<--tmuxpane>
+=item B<--tmuxpane> (Long beta testing)
Use B for output but put output into panes in the first window.
Useful if you want to monitor the progress of less than 100 concurrent
@@ -4604,6 +4617,11 @@ because I is an alias or a function. If it is a function you
need to B the function first or use B. An
alias will only work if you use B.
+=head2 Database with MySQL fails randomly
+
+The B<--sql*> options may fail randomly with MySQL. This problem does
+not exist with PostgreSQL.
+
=head1 REPORTING BUGS
diff --git a/src/parallel_alternatives.pod b/src/parallel_alternatives.pod
index ffbcf9e2..045ade9b 100644
--- a/src/parallel_alternatives.pod
+++ b/src/parallel_alternatives.pod
@@ -1367,6 +1367,27 @@ and fails on B.
parallel seq ::: 1 2 3 4 5 6
+=head2 DIFFERENCES BETWEEN concurrently AND GNU Parallel
+
+B runs jobs in parallel.
+
+The output is prepended with the job number, and may be incomplete:
+
+ $ concurrently 'seq 100000' | (sleep 3;wc -l)
+ 7165
+
+When pretty printing it caches output in memory. Output mixes by using
+test A below wether or not output is cached.
+
+There seems to be no way of making a template command and have
+B fill that with different args. The full commands must
+be given on the command line.
+
+There is also no way of controlling how many jobs should be run in
+parallel at a time - i.e. "number of jobslots". Instead all jobs are
+simply started in parallel.
+
+
=head2 Todo
machma. Requires Go >= 1.7.
diff --git a/src/parset.pod b/src/parset.pod
index 84ea5de9..93e074c3 100644
--- a/src/parset.pod
+++ b/src/parset.pod
@@ -11,7 +11,7 @@ parset - set shell variables in parallel
B I [options for GNU Parallel]
-B I [options for GNU Parallel] (alpha testing)
+B I [options for GNU Parallel] (beta testing)
=head1 DESCRIPTION
diff --git a/src/sql b/src/sql
index 986f2a06..8752a45f 100755
--- a/src/sql
+++ b/src/sql
@@ -576,7 +576,7 @@ $Global::Initfile && unlink $Global::Initfile;
exit ($err);
sub parse_options {
- $Global::version = 20180122;
+ $Global::version = 20180123;
$Global::progname = 'sql';
# This must be done first as this may exec myself
diff --git a/testsuite/tests-to-run/parallel-local-ssh7.sh b/testsuite/tests-to-run/parallel-local-ssh7.sh
index b325d82d..bcbb937c 100755
--- a/testsuite/tests-to-run/parallel-local-ssh7.sh
+++ b/testsuite/tests-to-run/parallel-local-ssh7.sh
@@ -16,33 +16,41 @@ par_ash_man() {
. `which env_parallel.ash`;
- alias myecho='echo aliases with \= \& \"'
+ alias myecho='echo aliases with \= \& \" \!'" \'"
+ myecho work
env_parallel myecho ::: work
env_parallel -S server myecho ::: work
env_parallel --env myecho myecho ::: work
env_parallel --env myecho -S server myecho ::: work
-
+
alias multiline='echo multiline
- echo aliases with \= \& \"'
+ echo aliases with \= \& \" \!'" \'"
+ multiline work
env_parallel multiline ::: work
env_parallel -S server multiline ::: work
env_parallel --env multiline multiline ::: work
env_parallel --env multiline -S server multiline ::: work
alias multiline="dummy"
-
- myvar='variables with = & "'
- env_parallel echo '$myvar' ::: work
- env_parallel -S server echo '$myvar' ::: work
- env_parallel --env myvar echo '$myvar' ::: work
- env_parallel --env myvar -S server echo '$myvar' ::: work
+
+ # Functions are not supported in ash
+
+ myvar='variables with = & " !'" '"
+ echo "$myvar" work
+ env_parallel echo '"$myvar"' ::: work
+ env_parallel -S server echo '"$myvar"' ::: work
+ env_parallel --env myvar echo '"$myvar"' ::: work
+ env_parallel --env myvar -S server echo '"$myvar"' ::: work
multivar='multiline
- variables with = & "'
+ variables with = & " !'" '"
+ echo "$multivar" work
env_parallel echo '"$multivar"' ::: work
env_parallel -S server echo '"$multivar"' ::: work
env_parallel --env multivar echo '"$multivar"' ::: work
env_parallel --env multivar -S server echo '"$multivar"' ::: work
+ # Arrays are not supported in ash
+
env_parallel ::: true false true false
echo exit value $? should be 2
@@ -60,15 +68,19 @@ par_bash_man() {
echo "### From man env_parallel"
. `which env_parallel.bash`;
+ shopt -s expand_aliases&>/dev/null;
- alias myecho='echo aliases with \= \& \"'
+ alias myecho='echo aliases with \= \& \" \!'" \'"
+ myecho work
env_parallel myecho ::: work
env_parallel -S server myecho ::: work
env_parallel --env myecho myecho ::: work
env_parallel --env myecho -S server myecho ::: work
-
+
+ # multiline aliases with when followed by newline
alias multiline='echo multiline
- echo aliases with \= \& \"'
+ echo aliases with \= \& \" \!'" \'"
+ multiline work
env_parallel 'multiline {};
echo but only when followed by a newline' ::: work
env_parallel -S server 'multiline {};
@@ -78,31 +90,35 @@ par_bash_man() {
env_parallel --env multiline -S server 'multiline {};
echo but only when followed by a newline' ::: work
alias multiline="dummy"
-
- myfunc() { echo functions 'with = & "' $*; }
+
+ myfunc() { echo functions 'with = & " !'" '" $*; }
+ myfunc work
env_parallel myfunc ::: work
env_parallel -S server myfunc ::: work
env_parallel --env myfunc myfunc ::: work
env_parallel --env myfunc -S server myfunc ::: work
-
- myvar='variables with = & "'
- env_parallel echo '$myvar' ::: work
- env_parallel -S server echo '$myvar' ::: work
- env_parallel --env myvar echo '$myvar' ::: work
- env_parallel --env myvar -S server echo '$myvar' ::: work
-
+
+ myvar='variables with = & " !'" '"
+ echo "$myvar" work
+ env_parallel echo '"$myvar"' ::: work
+ env_parallel -S server echo '"$myvar"' ::: work
+ env_parallel --env myvar echo '"$myvar"' ::: work
+ env_parallel --env myvar -S server echo '"$myvar"' ::: work
+
multivar='multiline
- variables with = & "'
+ variables with = & " !'" '"
+ echo "$multivar" work
env_parallel echo '"$multivar"' ::: work
env_parallel -S server echo '"$multivar"' ::: work
env_parallel --env multivar echo '"$multivar"' ::: work
env_parallel --env multivar -S server echo '"$multivar"' ::: work
- myarray=(arrays 'with = & "' work, too)
- env_parallel -k echo '${myarray[{}]}' ::: 0 1 2 3
- env_parallel -k -S server 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
+ myarray=(arrays 'with = & " !'" '" work, too)
+ echo "${myarray[0]}" "${myarray[1]}" "${myarray[2]}" "${myarray[3]}"
+ env_parallel -k echo '"${myarray[{}]}"' ::: 0 1 2 3
+ env_parallel -k -S server 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 ::: true false true false
echo exit value $? should be 2
@@ -130,14 +146,17 @@ par_csh_man() {
# Functions not supported
+ # TODO This does not work
+ # set myvar='variables with = & "'" '"
set myvar='variables with \= \& \"'
env_parallel echo '$myvar' ::: work
env_parallel -S server echo '$myvar' ::: work
env_parallel --env myvar echo '$myvar' ::: work
env_parallel --env myvar -S server echo '$myvar' ::: work
- # TODO this is not fixed
- set myarray=(arrays with\ \=\ \&\ \" work, too)
+ # Space is not supported in arrays
+
+ set myarray=(arrays with\=\&\""'" work, too)
env_parallel -k echo \$'{myarray[{}]}' ::: 1 2 3 4
env_parallel -k -S server echo \$'{myarray[{}]}' ::: 1 2 3 4
env_parallel -k --env myarray echo \$'{myarray[{}]}' ::: 1 2 3 4
@@ -162,33 +181,41 @@ par_dash_man() {
. `which env_parallel.dash`;
- alias myecho='echo aliases with \= \& \"'
+ alias myecho='echo aliases with \= \& \" \!'" \'"
+ myecho work
env_parallel myecho ::: work
env_parallel -S server myecho ::: work
env_parallel --env myecho myecho ::: work
env_parallel --env myecho -S server myecho ::: work
-
+
alias multiline='echo multiline
- echo aliases with \= \& \"'
+ echo aliases with \= \& \" \!'" \'"
+ multiline work
env_parallel multiline ::: work
env_parallel -S server multiline ::: work
env_parallel --env multiline multiline ::: work
env_parallel --env multiline -S server multiline ::: work
alias multiline="dummy"
-
- myvar='variables with = & "'
- env_parallel echo '$myvar' ::: work
- env_parallel -S server echo '$myvar' ::: work
- env_parallel --env myvar echo '$myvar' ::: work
- env_parallel --env myvar -S server echo '$myvar' ::: work
+
+ # Functions are not supported in dash
+
+ myvar='variables with = & " !'" '"
+ echo "$myvar" work
+ env_parallel echo '"$myvar"' ::: work
+ env_parallel -S server echo '"$myvar"' ::: work
+ env_parallel --env myvar echo '"$myvar"' ::: work
+ env_parallel --env myvar -S server echo '"$myvar"' ::: work
multivar='multiline
- variables with = & "'
+ variables with = & " !'" '"
+ echo "$multivar" work
env_parallel echo '"$multivar"' ::: work
env_parallel -S server echo '"$multivar"' ::: work
env_parallel --env multivar echo '"$multivar"' ::: work
env_parallel --env multivar -S server echo '"$multivar"' ::: work
+ # Arrays are not supported in dash
+
env_parallel ::: true false true false
echo exit value $? should be 2
@@ -204,27 +231,41 @@ par_fish_man() {
myscript=$(cat <<'_EOF'
echo "### From man env_parallel"
- alias myecho='echo aliases with \= \& \"'
+ alias myecho='echo aliases with \= \& \" \!'" \'"
+ myecho work
env_parallel myecho ::: work
env_parallel -S server myecho ::: work
env_parallel --env myecho myecho ::: work
env_parallel --env myecho -S server myecho ::: work
+ # multiline aliases does not work in fish
+
function myfunc
- echo functions with \= \& \" $argv
+ echo functions 'with = & " !'" '" $argv;
end
+ myfunc work
env_parallel myfunc ::: work
env_parallel -S server myfunc ::: work
env_parallel --env myfunc myfunc ::: work
env_parallel --env myfunc -S server myfunc ::: work
- set myvar 'variables = & "'
+ set myvar 'variables with = & " !'" '"
+ echo "$myvar" work
env_parallel echo '$myvar' ::: work
env_parallel -S server echo '$myvar' ::: work
env_parallel --env myvar echo '$myvar' ::: work
env_parallel --env myvar -S server echo '$myvar' ::: work
- set myarray arrays 'with = & "' work, too
+ set multivar 'multiline
+ variables with = & " !'" '"
+ echo "$multivar" work
+ env_parallel echo '"$multivar"' ::: work
+ env_parallel -S server echo '"$multivar"' ::: work
+ env_parallel --env multivar echo '"$multivar"' ::: work
+ env_parallel --env multivar -S server echo '"$multivar"' ::: work
+
+ set myarray arrays 'with = & " !'" '" work, too
+ echo $myarray[1] $myarray[2] $myarray[3] $myarray[4]
env_parallel -k echo '$myarray[{}]' ::: 1 2 3 4
env_parallel -k -S server echo '$myarray[{}]' ::: 1 2 3 4
env_parallel -k --env myarray echo '$myarray[{}]' ::: 1 2 3 4
@@ -247,37 +288,50 @@ par_ksh_man() {
. `which env_parallel.ksh`;
- alias myecho='echo aliases with \= \& \"'
+ alias myecho='echo aliases with \= \& \" \!'" \'"
+ myecho work
env_parallel myecho ::: work
env_parallel -S server myecho ::: work
env_parallel --env myecho myecho ::: work
env_parallel --env myecho -S server myecho ::: work
-
+
alias multiline='echo multiline
- echo aliases with \= \& \"'
+ echo aliases with \= \& \" \!'" \'"
+ multiline work
env_parallel multiline ::: work
env_parallel -S server multiline ::: work
env_parallel --env multiline multiline ::: work
env_parallel --env multiline -S server multiline ::: work
alias multiline='dummy'
-
- myfunc() { echo functions 'with = & "' $*; }
+
+ myfunc() { echo functions 'with = & " !'" '" $*; }
+ myfunc work
env_parallel myfunc ::: work
env_parallel -S server myfunc ::: work
env_parallel --env myfunc myfunc ::: work
env_parallel --env myfunc -S server myfunc ::: work
-
- myvar='variables with = & "'
- env_parallel echo '$myvar' ::: work
- env_parallel -S server echo '$myvar' ::: work
- env_parallel --env myvar echo '$myvar' ::: work
- env_parallel --env myvar -S server echo '$myvar' ::: work
-
- myarray=(arrays 'with = & "' work, too)
- env_parallel -k echo '${myarray[{}]}' ::: 0 1 2
- env_parallel -k -S server echo '${myarray[{}]}' ::: 0 1 2
- env_parallel -k --env myarray echo '${myarray[{}]}' ::: 0 1 2
- env_parallel -k --env myarray -S server echo '${myarray[{}]}' ::: 0 1 2
+
+ myvar='variables with = & " !'" '"
+ echo "$myvar" work
+ env_parallel echo '"$myvar"' ::: work
+ env_parallel -S server echo '"$myvar"' ::: work
+ env_parallel --env myvar echo '"$myvar"' ::: work
+ env_parallel --env myvar -S server echo '"$myvar"' ::: work
+
+ multivar='multiline
+ variables with = & " !'" '"
+ echo "$multivar" work
+ env_parallel echo '"$multivar"' ::: work
+ env_parallel -S server echo '"$multivar"' ::: work
+ env_parallel --env multivar echo '"$multivar"' ::: work
+ env_parallel --env multivar -S server echo '"$multivar"' ::: work
+
+ myarray=(arrays 'with = & " !'" '" work, too)
+ echo "${myarray[0]}" "${myarray[1]}" "${myarray[2]}" "${myarray[3]}"
+ env_parallel -k echo '"${myarray[{}]}"' ::: 0 1 2 3
+ env_parallel -k -S server 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 ::: true false true false
echo exit value $? should be 2
@@ -297,33 +351,41 @@ par_sh_man() {
. `which env_parallel.sh`;
- alias myecho='echo aliases with \= \& \"'
+ alias myecho='echo aliases with \= \& \" \!'" \'"
+ myecho work
env_parallel myecho ::: work
env_parallel -S server myecho ::: work
env_parallel --env myecho myecho ::: work
env_parallel --env myecho -S server myecho ::: work
-
+
alias multiline='echo multiline
- echo aliases with \= \& \"'
+ echo aliases with \= \& \" \!'" \'"
+ multiline work
env_parallel multiline ::: work
env_parallel -S server multiline ::: work
env_parallel --env multiline multiline ::: work
env_parallel --env multiline -S server multiline ::: work
alias multiline="dummy"
-
- myvar='variables with = & "'
- env_parallel echo '$myvar' ::: work
- env_parallel -S server echo '$myvar' ::: work
- env_parallel --env myvar echo '$myvar' ::: work
- env_parallel --env myvar -S server echo '$myvar' ::: work
+
+ # Functions not supported
+
+ myvar='variables with = & " !'" '"
+ echo "$myvar" work
+ env_parallel echo '"$myvar"' ::: work
+ env_parallel -S server echo '"$myvar"' ::: work
+ env_parallel --env myvar echo '"$myvar"' ::: work
+ env_parallel --env myvar -S server echo '"$myvar"' ::: work
multivar='multiline
- variables with = & "'
+ variables with = & " !'" '"
+ echo "$multivar" work
env_parallel echo '"$multivar"' ::: work
env_parallel -S server echo '"$multivar"' ::: work
env_parallel --env multivar echo '"$multivar"' ::: work
env_parallel --env multivar -S server echo '"$multivar"' ::: work
+ # Arrays are not supported by sh
+
env_parallel ::: true false true false
echo exit value $? should be 2
@@ -349,18 +411,21 @@ par_tcsh_man() {
echo Functions not supported
+ # TODO This does not work
+ # set myvar='variables with = & "'" '"
set myvar='variables with \= \& \"'
env_parallel echo '$myvar' ::: work
env_parallel -S server echo '$myvar' ::: work
env_parallel --env myvar echo '$myvar' ::: work
env_parallel --env myvar -S server echo '$myvar' ::: work
- # TODO this is not fixed
- set myarray=(arrays with\ \=\ \&\ \" work, too)
- env_parallel -k echo \$'{myarray[{}]}' ::: 1 2 3
- env_parallel -k -S server echo \$'{myarray[{}]}' ::: 1 2 3
- env_parallel -k --env myarray echo \$'{myarray[{}]}' ::: 1 2 3
- env_parallel -k --env myarray -S server echo \$'{myarray[{}]}' ::: 1 2 3
+ # Space is not supported in arrays
+
+ set myarray=(arrays with\=\&\""'" work, too)
+ env_parallel -k echo \$'{myarray[{}]}' ::: 1 2 3 4
+ env_parallel -k -S server echo \$'{myarray[{}]}' ::: 1 2 3 4
+ env_parallel -k --env myarray echo \$'{myarray[{}]}' ::: 1 2 3 4
+ env_parallel -k --env myarray -S server echo \$'{myarray[{}]}' ::: 1 2 3 4
env_parallel ::: true false true false
echo exit value $status should be 2
@@ -374,41 +439,59 @@ _EOF
par_zsh_man() {
echo '### zsh'
+ # eval is needed make aliases work
myscript=$(cat <<'_EOF'
echo "### From man env_parallel"
. `which env_parallel.zsh`;
- alias myecho='echo aliases with \= \& \"'
+ alias myecho='echo aliases with \= \& \" \!'" \'"
+ # eval is needed make aliases work
+ eval myecho work
env_parallel myecho ::: work
env_parallel -S server myecho ::: work
env_parallel --env myecho myecho ::: work
env_parallel --env myecho -S server myecho ::: work
-
+
alias multiline='echo multiline
- echo aliases with \= \& \"'
+ echo aliases with \= \& \" \!'" \'"
+ # eval is needed make aliases work
+ eval multiline work
env_parallel multiline ::: work
env_parallel -S server multiline ::: work
env_parallel --env multiline multiline ::: work
env_parallel --env multiline -S server multiline ::: work
-
- myfunc() { echo functions 'with = & "' $*; }
+ alias multiline="dummy"
+
+ myfunc() { echo functions 'with = & " !'" '" $*; }
+ myfunc work
env_parallel myfunc ::: work
env_parallel -S server myfunc ::: work
env_parallel --env myfunc myfunc ::: work
env_parallel --env myfunc -S server myfunc ::: work
-
- myvar='variables with = & "'
- env_parallel echo '$myvar' ::: work
- env_parallel -S server echo '$myvar' ::: work
- env_parallel --env myvar echo '$myvar' ::: work
- env_parallel --env myvar -S server echo '$myvar' ::: work
-
- myarray=(arrays 'with = & "' work, too)
- env_parallel -k echo '${myarray[{}]}' ::: 1 2 3 4
- env_parallel -k -S server echo '${myarray[{}]}' ::: 1 2 3 4
- env_parallel -k --env myarray echo '${myarray[{}]}' ::: 1 2 3 4
- env_parallel -k --env myarray -S server echo '${myarray[{}]}' ::: 1 2 3 4
+
+ myvar='variables with = & " !'" '"
+ echo "$myvar" work
+ env_parallel echo '"$myvar"' ::: work
+ env_parallel -S server echo '"$myvar"' ::: work
+ env_parallel --env myvar echo '"$myvar"' ::: work
+ env_parallel --env myvar -S server echo '"$myvar"' ::: work
+
+ multivar='multiline
+ variables with = & " !'" '"
+ echo "$multivar" work
+ env_parallel echo '"$multivar"' ::: work
+ env_parallel -S server echo '"$multivar"' ::: work
+ env_parallel --env multivar echo '"$multivar"' ::: work
+ env_parallel --env multivar -S server echo '"$multivar"' ::: work
+
+ myarray=(arrays 'with = & " !'" '" work, too)
+ # zsh counts from 1 - not 0
+ echo "${myarray[1]}" "${myarray[2]}" "${myarray[3]}" "${myarray[4]}"
+ env_parallel -k echo '"${myarray[{}]}"' ::: 1 2 3 4
+ env_parallel -k -S server echo '"${myarray[{}]}"' ::: 1 2 3 4
+ env_parallel -k --env myarray echo '"${myarray[{}]}"' ::: 1 2 3 4
+ env_parallel -k --env myarray -S server echo '"${myarray[{}]}"' ::: 1 2 3 4
env_parallel ::: true false true false
echo exit value $? should be 2
diff --git a/testsuite/tests-to-run/parallel-local-ssh9.sh b/testsuite/tests-to-run/parallel-local-ssh9.sh
new file mode 100644
index 00000000..ad019f67
--- /dev/null
+++ b/testsuite/tests-to-run/parallel-local-ssh9.sh
@@ -0,0 +1,131 @@
+#!/bin/bash
+
+par_ash_embed() {
+ myscript=$(cat <<'_EOF'
+ echo '--embed'
+ parallel --embed | tac | perl -pe '
+ /^parallel/ and not $seen++ and s{^}{
+echo \$b
+parset a,b,c echo ::: ParsetOK ParsetOK ParsetOK
+env_parallel echo ::: env_parallel_OK
+parallel echo ::: parallel_OK
+PATH=/usr/sbin:/usr/bin:/sbin:/bin
+# Do not look for parallel in /usr/local/bin
+. \`which env_parallel.ash\`
+}
+ ' | tac > parallel-embed
+ chmod +x parallel-embed
+ ./parallel-embed
+# rm parallel-embed
+_EOF
+ )
+ ssh ash@lo "$myscript"
+}
+
+par_bash_embed() {
+ myscript=$(cat <<'_EOF'
+ echo '--embed'
+ parallel --embed | tac | perl -pe '
+ /^parallel/ and not $seen++ and s{^}{
+echo \${a[1]}
+parset a echo ::: ParsetOK ParsetOK ParsetOK
+env_parallel echo ::: env_parallel_OK
+parallel echo ::: parallel_OK
+PATH=/usr/sbin:/usr/bin:/sbin:/bin
+# Do not look for parallel in /usr/local/bin
+. \`which env_parallel.bash\`
+}
+ ' | tac > parallel-embed
+ chmod +x parallel-embed
+ ./parallel-embed
+ rm parallel-embed
+_EOF
+ )
+ ssh bash@lo "$myscript"
+}
+
+par_csh_embed() {
+ echo Not implemented
+}
+
+par_fish_embed() {
+ echo Not implemented
+}
+
+par_ksh_embed() {
+ myscript=$(cat <<'_EOF'
+ echo '--embed'
+ parallel --embed | tac | perl -pe '
+ /^parallel/ and not $seen++ and s{^}{
+echo \${a[1]}
+parset a echo ::: ParsetOK ParsetOK ParsetOK
+env_parallel echo ::: env_parallel_OK
+parallel echo ::: parallel_OK
+PATH=/usr/sbin:/usr/bin:/sbin:/bin
+# Do not look for parallel in /usr/local/bin
+. \`which env_parallel.ksh\`
+}
+ ' | tac > parallel-embed
+ chmod +x parallel-embed
+ ./parallel-embed
+ rm parallel-embed
+_EOF
+ )
+ ssh ksh@lo "$myscript"
+}
+
+par_sh_embed() {
+ myscript=$(cat <<'_EOF'
+ echo '--embed'
+ parallel --embed | tac | perl -pe '
+ /^parallel/ and not $seen++ and s{^}{
+echo \$b
+parset a,b,c echo ::: ParsetOK ParsetOK ParsetOK
+env_parallel echo ::: env_parallel_OK
+parallel echo ::: parallel_OK
+PATH=/usr/sbin:/usr/bin:/sbin:/bin
+# Do not look for parallel in /usr/local/bin
+. \`which env_parallel.sh\`
+}
+ ' | tac > parallel-embed
+ chmod +x parallel-embed
+ ./parallel-embed
+# rm parallel-embed
+_EOF
+ )
+ ssh sh@lo "$myscript"
+}
+
+par_tcsh_embed() {
+ echo Not implemented
+}
+
+par_zsh_embed() {
+ myscript=$(cat <<'_EOF'
+ echo '--embed'
+ parallel --embed | tac | perl -pe '
+ /^parallel/ and not $seen++ and s{^}{
+echo \${a[1]}
+parset a echo ::: ParsetOK ParsetOK ParsetOK
+env_parallel echo ::: env_parallel_OK
+parallel echo ::: parallel_OK
+PATH=/usr/sbin:/usr/bin:/sbin:/bin
+# Do not look for parallel in /usr/local/bin
+. \`which env_parallel.zsh\`
+}
+ ' | tac > parallel-embed
+ chmod +x parallel-embed
+ ./parallel-embed
+ rm parallel-embed
+_EOF
+ )
+ ssh zsh@lo "$myscript"
+}
+
+export -f $(compgen -A function | grep par_)
+#compgen -A function | grep par_ | sort | parallel --delay $D -j$P --tag -k '{} 2>&1'
+#compgen -A function | grep par_ | sort |
+compgen -A function | grep par_ | sort -r |
+# parallel --joblog /tmp/jl-`basename $0` --delay $D -j$P --tag -k '{} 2>&1'
+ parallel --joblog /tmp/jl-`basename $0` -j200% --tag -k '{} 2>&1' |
+ perl -pe 's/line \d\d\d:/line XXX:/'
diff --git a/testsuite/tests-to-run/parallel-local12.sh b/testsuite/tests-to-run/parallel-local12.sh
index 8d517ddf..2df7638b 100644
--- a/testsuite/tests-to-run/parallel-local12.sh
+++ b/testsuite/tests-to-run/parallel-local12.sh
@@ -2,6 +2,8 @@
rm -f ~/.parallel/will-cite
+resize=`resize`
+
# Disabled 2015-06-01
#
# echo '### Test stdin goes to first command only ("-" as argument)'
@@ -39,4 +41,7 @@ rm /tmp/parallel-script-for-script3
stdout parallel --citation < /dev/null
touch ~/.parallel/will-cite
+# Clear screen
+eval `resize`
+seq $LINES | parallel -N0 echo > /dev/tty
reset
diff --git a/testsuite/wanted-results/parallel-local-10s b/testsuite/wanted-results/parallel-local-10s
index 16f79ccc..1f0072de 100644
--- a/testsuite/wanted-results/parallel-local-10s
+++ b/testsuite/wanted-results/parallel-local-10s
@@ -27,8 +27,8 @@ par_interactive sleep 0.1; echo opt-p 2 ?...n
par_interactive sleep 0.1; echo opt-p 3 ?...y
par_interactive spawn /tmp/parallel-script-for-expect
par_k ### Test -k
-par_k parallel: Warning: Only enough file handles to run 9 jobs in parallel.
-par_k parallel: Warning: Running 'parallel -j0 -N 9 --pipe parallel -j0' or
+par_k parallel: Warning: Only enough file handles to run 8 jobs in parallel.
+par_k parallel: Warning: Running 'parallel -j0 -N 8 --pipe parallel -j0' or
par_k parallel: Warning: raising 'ulimit -n' or 'nofile' in /etc/security/limits.conf
par_k parallel: Warning: or /proc/sys/fs/file-max may help.
par_k begin
diff --git a/testsuite/wanted-results/parallel-local-ssh7 b/testsuite/wanted-results/parallel-local-ssh7
index a91adbee..323034e8 100644
--- a/testsuite/wanted-results/parallel-local-ssh7
+++ b/testsuite/wanted-results/parallel-local-ssh7
@@ -68,40 +68,56 @@ par_zsh_parset myecho myvar myarr 0 myfun foo myecho myvar myarr 0 myfun ba
par_zsh_parset myecho myvar myarr 0 myfun foo myecho myvar myarr 0 myfun bar myecho myvar myarr 0 myfun baz
par_zsh_man ### zsh
par_zsh_man ### From man env_parallel
-par_zsh_man aliases with = & " work
-par_zsh_man aliases with = & " work
-par_zsh_man aliases with = & " work
-par_zsh_man aliases with = & " work
+par_zsh_man aliases with = & " ! ' work
+par_zsh_man aliases with = & " ! ' work
+par_zsh_man aliases with = & " ! ' work
+par_zsh_man aliases with = & " ! ' work
+par_zsh_man aliases with = & " ! ' work
par_zsh_man multiline
-par_zsh_man aliases with = & " work
+par_zsh_man aliases with = & " ! ' work
par_zsh_man multiline
-par_zsh_man aliases with = & " work
+par_zsh_man aliases with = & " ! ' work
par_zsh_man multiline
-par_zsh_man aliases with = & " work
+par_zsh_man aliases with = & " ! ' work
par_zsh_man multiline
-par_zsh_man aliases with = & " work
-par_zsh_man functions with = & " work
-par_zsh_man functions with = & " work
-par_zsh_man functions with = & " work
-par_zsh_man functions with = & " work
-par_zsh_man variables with = & " work
-par_zsh_man variables with = & " work
-par_zsh_man variables with = & " work
-par_zsh_man variables with = & " work
+par_zsh_man aliases with = & " ! ' work
+par_zsh_man multiline
+par_zsh_man aliases with = & " ! ' work
+par_zsh_man functions with = & " ! ' work
+par_zsh_man functions with = & " ! ' work
+par_zsh_man functions with = & " ! ' work
+par_zsh_man functions with = & " ! ' work
+par_zsh_man functions with = & " ! ' work
+par_zsh_man variables with = & " ! ' work
+par_zsh_man variables with = & " ! ' work
+par_zsh_man variables with = & " ! ' work
+par_zsh_man variables with = & " ! ' work
+par_zsh_man variables with = & " ! ' work
+par_zsh_man multiline
+par_zsh_man variables with = & " ! ' work
+par_zsh_man multiline
+par_zsh_man variables with = & " ! ' work
+par_zsh_man multiline
+par_zsh_man variables with = & " ! ' work
+par_zsh_man multiline
+par_zsh_man variables with = & " ! ' work
+par_zsh_man multiline
+par_zsh_man variables with = & " ! ' work
+par_zsh_man arrays with = & " ! ' work, too
par_zsh_man arrays
-par_zsh_man with = & "
+par_zsh_man with = & " ! '
par_zsh_man work,
par_zsh_man too
par_zsh_man arrays
-par_zsh_man with = & "
+par_zsh_man with = & " ! '
par_zsh_man work,
par_zsh_man too
par_zsh_man arrays
-par_zsh_man with = & "
+par_zsh_man with = & " ! '
par_zsh_man work,
par_zsh_man too
par_zsh_man arrays
-par_zsh_man with = & "
+par_zsh_man with = & " ! '
par_zsh_man work,
par_zsh_man too
par_zsh_man exit value 2 should be 2
@@ -136,41 +152,49 @@ par_zsh_environment_too_big OK_bigfunc_remote
par_zsh_environment_too_big OK_bigfunc_quote
par_zsh_environment_too_big OK_bigfunc_quote_remote
par_zsh_environment_too_big Rest should fail
+par_zsh_environment_too_big _which:12: argument list too long: perl
par_zsh_environment_too_big env_parallel: Error: Your environment is too big.
par_zsh_environment_too_big env_parallel: Error: Try running this in a clean environment once:
par_zsh_environment_too_big env_parallel: Error: env_parallel --record-env
par_zsh_environment_too_big env_parallel: Error: And the use '--env _'
par_zsh_environment_too_big env_parallel: Error: For details see: man env_parallel
+par_zsh_environment_too_big _which:12: argument list too long: perl
par_zsh_environment_too_big env_parallel: Error: Your environment is too big.
par_zsh_environment_too_big env_parallel: Error: Try running this in a clean environment once:
par_zsh_environment_too_big env_parallel: Error: env_parallel --record-env
par_zsh_environment_too_big env_parallel: Error: And the use '--env _'
par_zsh_environment_too_big env_parallel: Error: For details see: man env_parallel
+par_zsh_environment_too_big _which:12: argument list too long: perl
par_zsh_environment_too_big env_parallel: Error: Your environment is too big.
par_zsh_environment_too_big env_parallel: Error: Try running this in a clean environment once:
par_zsh_environment_too_big env_parallel: Error: env_parallel --record-env
par_zsh_environment_too_big env_parallel: Error: And the use '--env _'
par_zsh_environment_too_big env_parallel: Error: For details see: man env_parallel
+par_zsh_environment_too_big _which:12: argument list too long: perl
par_zsh_environment_too_big env_parallel: Error: Your environment is too big.
par_zsh_environment_too_big env_parallel: Error: Try running this in a clean environment once:
par_zsh_environment_too_big env_parallel: Error: env_parallel --record-env
par_zsh_environment_too_big env_parallel: Error: And the use '--env _'
par_zsh_environment_too_big env_parallel: Error: For details see: man env_parallel
+par_zsh_environment_too_big _which:12: argument list too long: perl
par_zsh_environment_too_big env_parallel: Error: Your environment is too big.
par_zsh_environment_too_big env_parallel: Error: Try running this in a clean environment once:
par_zsh_environment_too_big env_parallel: Error: env_parallel --record-env
par_zsh_environment_too_big env_parallel: Error: And the use '--env _'
par_zsh_environment_too_big env_parallel: Error: For details see: man env_parallel
+par_zsh_environment_too_big _which:12: argument list too long: perl
par_zsh_environment_too_big env_parallel: Error: Your environment is too big.
par_zsh_environment_too_big env_parallel: Error: Try running this in a clean environment once:
par_zsh_environment_too_big env_parallel: Error: env_parallel --record-env
par_zsh_environment_too_big env_parallel: Error: And the use '--env _'
par_zsh_environment_too_big env_parallel: Error: For details see: man env_parallel
+par_zsh_environment_too_big _which:12: argument list too long: perl
par_zsh_environment_too_big env_parallel: Error: Your environment is too big.
par_zsh_environment_too_big env_parallel: Error: Try running this in a clean environment once:
par_zsh_environment_too_big env_parallel: Error: env_parallel --record-env
par_zsh_environment_too_big env_parallel: Error: And the use '--env _'
par_zsh_environment_too_big env_parallel: Error: For details see: man env_parallel
+par_zsh_environment_too_big _which:12: argument list too long: perl
par_zsh_environment_too_big env_parallel: Error: Your environment is too big.
par_zsh_environment_too_big env_parallel: Error: Try running this in a clean environment once:
par_zsh_environment_too_big env_parallel: Error: env_parallel --record-env
@@ -219,23 +243,29 @@ par_tcsh_man aliases with = & " work
par_tcsh_man aliases with = & " work
par_tcsh_man aliases with = & " work
par_tcsh_man Functions not supported
+par_tcsh_man #: Command not found.
+par_tcsh_man #: Command not found.
par_tcsh_man variables with = & " work
par_tcsh_man variables with = & " work
par_tcsh_man variables with = & " work
par_tcsh_man variables with = & " work
par_tcsh_man #: Command not found.
par_tcsh_man arrays
-par_tcsh_man with
-par_tcsh_man =
+par_tcsh_man with=&"'
+par_tcsh_man work,
+par_tcsh_man too
par_tcsh_man arrays
-par_tcsh_man with
-par_tcsh_man =
+par_tcsh_man with=&"'
+par_tcsh_man work,
+par_tcsh_man too
par_tcsh_man arrays
-par_tcsh_man with
-par_tcsh_man =
+par_tcsh_man with=&"'
+par_tcsh_man work,
+par_tcsh_man too
par_tcsh_man arrays
-par_tcsh_man with
-par_tcsh_man =
+par_tcsh_man with=&"'
+par_tcsh_man work,
+par_tcsh_man too
par_tcsh_man exit value 2 should be 2
par_tcsh_man Unknown option: no-such-option
par_tcsh_man Usage:
@@ -354,30 +384,36 @@ par_sh_parset 2
par_sh_parset 3
par_sh_man ### sh
par_sh_man ### From man env_parallel
-par_sh_man aliases with = & " work
-par_sh_man aliases with = & " work
-par_sh_man aliases with = & " work
-par_sh_man aliases with = & " work
+par_sh_man aliases with = & " ! ' work
+par_sh_man aliases with = & " ! ' work
+par_sh_man aliases with = & " ! ' work
+par_sh_man aliases with = & " ! ' work
+par_sh_man aliases with = & " ! ' work
par_sh_man multiline
-par_sh_man aliases with = & " work
+par_sh_man aliases with = & " ! ' work
par_sh_man multiline
-par_sh_man aliases with = & " work
+par_sh_man aliases with = & " ! ' work
par_sh_man multiline
-par_sh_man aliases with = & " work
+par_sh_man aliases with = & " ! ' work
par_sh_man multiline
-par_sh_man aliases with = & " work
-par_sh_man variables with = & " work
-par_sh_man variables with = & " work
-par_sh_man variables with = & " work
-par_sh_man variables with = & " work
+par_sh_man aliases with = & " ! ' work
par_sh_man multiline
-par_sh_man variables with = & " work
+par_sh_man aliases with = & " ! ' work
+par_sh_man variables with = & " ! ' work
+par_sh_man variables with = & " ! ' work
+par_sh_man variables with = & " ! ' work
+par_sh_man variables with = & " ! ' work
+par_sh_man variables with = & " ! ' work
par_sh_man multiline
-par_sh_man variables with = & " work
+par_sh_man variables with = & " ! ' work
par_sh_man multiline
-par_sh_man variables with = & " work
+par_sh_man variables with = & " ! ' work
par_sh_man multiline
-par_sh_man variables with = & " work
+par_sh_man variables with = & " ! ' work
+par_sh_man multiline
+par_sh_man variables with = & " ! ' work
+par_sh_man multiline
+par_sh_man variables with = & " ! ' work
par_sh_man exit value 2 should be 2
par_sh_man Unknown option: no-such-option
par_sh_man exit value 255 should be 255
@@ -392,25 +428,25 @@ par_sh_environment_too_big OK_bigvar_remote
par_sh_environment_too_big OK_bigvar_quote
par_sh_environment_too_big OK_bigvar_quote_remote
par_sh_environment_too_big Rest should fail
-par_sh_environment_too_big sh: 132: perl: Argument list too long
+par_sh_environment_too_big sh: 133: perl: Argument list too long
par_sh_environment_too_big env_parallel: Error: Your environment is too big.
par_sh_environment_too_big env_parallel: Error: Try running this in a clean environment once:
par_sh_environment_too_big env_parallel: Error: env_parallel --record-env
par_sh_environment_too_big env_parallel: Error: And the use '--env _'
par_sh_environment_too_big env_parallel: Error: For details see: man env_parallel
-par_sh_environment_too_big sh: 132: perl: Argument list too long
+par_sh_environment_too_big sh: 133: perl: Argument list too long
par_sh_environment_too_big env_parallel: Error: Your environment is too big.
par_sh_environment_too_big env_parallel: Error: Try running this in a clean environment once:
par_sh_environment_too_big env_parallel: Error: env_parallel --record-env
par_sh_environment_too_big env_parallel: Error: And the use '--env _'
par_sh_environment_too_big env_parallel: Error: For details see: man env_parallel
-par_sh_environment_too_big sh: 132: perl: Argument list too long
+par_sh_environment_too_big sh: 133: perl: Argument list too long
par_sh_environment_too_big env_parallel: Error: Your environment is too big.
par_sh_environment_too_big env_parallel: Error: Try running this in a clean environment once:
par_sh_environment_too_big env_parallel: Error: env_parallel --record-env
par_sh_environment_too_big env_parallel: Error: And the use '--env _'
par_sh_environment_too_big env_parallel: Error: For details see: man env_parallel
-par_sh_environment_too_big sh: 132: perl: Argument list too long
+par_sh_environment_too_big sh: 133: perl: Argument list too long
par_sh_environment_too_big env_parallel: Error: Your environment is too big.
par_sh_environment_too_big env_parallel: Error: Try running this in a clean environment once:
par_sh_environment_too_big env_parallel: Error: env_parallel --record-env
@@ -493,50 +529,70 @@ par_ksh_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar m
par_ksh_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar myecho myvar myarr 1 myfun baz
par_ksh_man ### ksh
par_ksh_man ### From man env_parallel
-par_ksh_man aliases with = & " work
-par_ksh_man aliases with = & " work
-par_ksh_man aliases with = & " work
-par_ksh_man aliases with = & " work
+par_ksh_man aliases with = & " ! ' work
+par_ksh_man aliases with = & " ! ' work
+par_ksh_man aliases with = & " ! ' work
+par_ksh_man aliases with = & " ! ' work
+par_ksh_man aliases with = & " ! ' work
+par_ksh_man multiline
+par_ksh_man aliases with = & " ! ' work
par_ksh_man env_parallel: Warning: Alias "multiline" contains newline.
par_ksh_man env_parallel: Warning: Make sure the command has at least one newline after "multiline".
par_ksh_man env_parallel: Warning: See BUGS in "man env_parallel".
par_ksh_man multiline
-par_ksh_man aliases with = & " work
+par_ksh_man aliases with = & " ! ' work
par_ksh_man env_parallel: Warning: Alias "multiline" contains newline.
par_ksh_man env_parallel: Warning: Make sure the command has at least one newline after "multiline".
par_ksh_man env_parallel: Warning: See BUGS in "man env_parallel".
par_ksh_man multiline
-par_ksh_man aliases with = & " work
+par_ksh_man aliases with = & " ! ' work
par_ksh_man env_parallel: Warning: Alias "multiline" contains newline.
par_ksh_man env_parallel: Warning: Make sure the command has at least one newline after "multiline".
par_ksh_man env_parallel: Warning: See BUGS in "man env_parallel".
par_ksh_man multiline
-par_ksh_man aliases with = & " work
+par_ksh_man aliases with = & " ! ' work
par_ksh_man env_parallel: Warning: Alias "multiline" contains newline.
par_ksh_man env_parallel: Warning: Make sure the command has at least one newline after "multiline".
par_ksh_man env_parallel: Warning: See BUGS in "man env_parallel".
par_ksh_man multiline
-par_ksh_man aliases with = & " work
-par_ksh_man functions with = & " work
-par_ksh_man functions with = & " work
-par_ksh_man functions with = & " work
-par_ksh_man functions with = & " work
-par_ksh_man variables with = & " work
-par_ksh_man variables with = & " work
-par_ksh_man variables with = & " work
-par_ksh_man variables with = & " work
+par_ksh_man aliases with = & " ! ' work
+par_ksh_man functions with = & " ! ' work
+par_ksh_man functions with = & " ! ' work
+par_ksh_man functions with = & " ! ' work
+par_ksh_man functions with = & " ! ' work
+par_ksh_man functions with = & " ! ' work
+par_ksh_man variables with = & " ! ' work
+par_ksh_man variables with = & " ! ' work
+par_ksh_man variables with = & " ! ' work
+par_ksh_man variables with = & " ! ' work
+par_ksh_man variables with = & " ! ' work
+par_ksh_man multiline
+par_ksh_man variables with = & " ! ' work
+par_ksh_man multiline
+par_ksh_man variables with = & " ! ' work
+par_ksh_man multiline
+par_ksh_man variables with = & " ! ' work
+par_ksh_man multiline
+par_ksh_man variables with = & " ! ' work
+par_ksh_man multiline
+par_ksh_man variables with = & " ! ' work
+par_ksh_man arrays with = & " ! ' work, too
par_ksh_man arrays
-par_ksh_man with = & "
+par_ksh_man with = & " ! '
par_ksh_man work,
+par_ksh_man too
par_ksh_man arrays
-par_ksh_man with = & "
+par_ksh_man with = & " ! '
par_ksh_man work,
+par_ksh_man too
par_ksh_man arrays
-par_ksh_man with = & "
+par_ksh_man with = & " ! '
par_ksh_man work,
+par_ksh_man too
par_ksh_man arrays
-par_ksh_man with = & "
+par_ksh_man with = & " ! '
par_ksh_man work,
+par_ksh_man too
par_ksh_man exit value 2 should be 2
par_ksh_man Unknown option: no-such-option
par_ksh_man exit value 255 should be 255
@@ -676,32 +732,42 @@ par_fish_underscore OK if ^^^^^^^^^^^^^^^^^ no myfunc
par_fish_parset Not implemented
par_fish_man ### fish
par_fish_man ### From man env_parallel
-par_fish_man aliases with = & " work
-par_fish_man aliases with = & " work
-par_fish_man aliases with = & " work
-par_fish_man aliases with = & " work
-par_fish_man functions with = & " work
-par_fish_man functions with = & " work
-par_fish_man functions with = & " work
-par_fish_man functions with = & " work
-par_fish_man variables = & " work
-par_fish_man variables = & " work
-par_fish_man variables = & " work
-par_fish_man variables = & " work
+par_fish_man aliases with = & " ! ' work
+par_fish_man aliases with = & " ! ' work
+par_fish_man aliases with = & " ! ' work
+par_fish_man aliases with = & " ! ' work
+par_fish_man aliases with = & " ! ' work
+par_fish_man functions with = & " ! ' work
+par_fish_man functions with = & " ! ' work
+par_fish_man functions with = & " ! ' work
+par_fish_man functions with = & " ! ' work
+par_fish_man functions with = & " ! ' work
+par_fish_man variables with = & " ! ' work
+par_fish_man variables with = & " ! ' work
+par_fish_man variables with = & " ! ' work
+par_fish_man variables with = & " ! ' work
+par_fish_man variables with = & " ! ' work
+par_fish_man multiline
+par_fish_man variables with = & " ! ' work
+par_fish_man multiline\n variables with = & " ! ' work
+par_fish_man multiline\n variables with = & " ! ' work
+par_fish_man multiline\n variables with = & " ! ' work
+par_fish_man multiline\n variables with = & " ! ' work
+par_fish_man arrays with = & " ! ' work, too
par_fish_man arrays
-par_fish_man with = & "
+par_fish_man with = & " ! '
par_fish_man work,
par_fish_man too
par_fish_man arrays
-par_fish_man with = & "
+par_fish_man with = & " ! '
par_fish_man work,
par_fish_man too
par_fish_man arrays
-par_fish_man with = & "
+par_fish_man with = & " ! '
par_fish_man work,
par_fish_man too
par_fish_man arrays
-par_fish_man with = & "
+par_fish_man with = & " ! '
par_fish_man work,
par_fish_man too
par_fish_man exit value 2 should be 2
@@ -791,30 +857,36 @@ par_dash_parset 2
par_dash_parset 3
par_dash_man ### dash
par_dash_man ### From man env_parallel
-par_dash_man aliases with = & " work
-par_dash_man aliases with = & " work
-par_dash_man aliases with = & " work
-par_dash_man aliases with = & " work
+par_dash_man aliases with = & " ! ' work
+par_dash_man aliases with = & " ! ' work
+par_dash_man aliases with = & " ! ' work
+par_dash_man aliases with = & " ! ' work
+par_dash_man aliases with = & " ! ' work
par_dash_man multiline
-par_dash_man aliases with = & " work
+par_dash_man aliases with = & " ! ' work
par_dash_man multiline
-par_dash_man aliases with = & " work
+par_dash_man aliases with = & " ! ' work
par_dash_man multiline
-par_dash_man aliases with = & " work
+par_dash_man aliases with = & " ! ' work
par_dash_man multiline
-par_dash_man aliases with = & " work
-par_dash_man variables with = & " work
-par_dash_man variables with = & " work
-par_dash_man variables with = & " work
-par_dash_man variables with = & " work
+par_dash_man aliases with = & " ! ' work
par_dash_man multiline
-par_dash_man variables with = & " work
+par_dash_man aliases with = & " ! ' work
+par_dash_man variables with = & " ! ' work
+par_dash_man variables with = & " ! ' work
+par_dash_man variables with = & " ! ' work
+par_dash_man variables with = & " ! ' work
+par_dash_man variables with = & " ! ' work
par_dash_man multiline
-par_dash_man variables with = & " work
+par_dash_man variables with = & " ! ' work
par_dash_man multiline
-par_dash_man variables with = & " work
+par_dash_man variables with = & " ! ' work
par_dash_man multiline
-par_dash_man variables with = & " work
+par_dash_man variables with = & " ! ' work
+par_dash_man multiline
+par_dash_man variables with = & " ! ' work
+par_dash_man multiline
+par_dash_man variables with = & " ! ' work
par_dash_man exit value 2 should be 2
par_dash_man Unknown option: no-such-option
par_dash_man exit value 255 should be 255
@@ -829,25 +901,25 @@ par_dash_environment_too_big OK_bigvar_remote
par_dash_environment_too_big OK_bigvar_quote
par_dash_environment_too_big OK_bigvar_quote_remote
par_dash_environment_too_big Rest should fail
-par_dash_environment_too_big dash: 132: perl: Argument list too long
+par_dash_environment_too_big dash: 133: perl: Argument list too long
par_dash_environment_too_big env_parallel: Error: Your environment is too big.
par_dash_environment_too_big env_parallel: Error: Try running this in a clean environment once:
par_dash_environment_too_big env_parallel: Error: env_parallel --record-env
par_dash_environment_too_big env_parallel: Error: And the use '--env _'
par_dash_environment_too_big env_parallel: Error: For details see: man env_parallel
-par_dash_environment_too_big dash: 132: perl: Argument list too long
+par_dash_environment_too_big dash: 133: perl: Argument list too long
par_dash_environment_too_big env_parallel: Error: Your environment is too big.
par_dash_environment_too_big env_parallel: Error: Try running this in a clean environment once:
par_dash_environment_too_big env_parallel: Error: env_parallel --record-env
par_dash_environment_too_big env_parallel: Error: And the use '--env _'
par_dash_environment_too_big env_parallel: Error: For details see: man env_parallel
-par_dash_environment_too_big dash: 132: perl: Argument list too long
+par_dash_environment_too_big dash: 133: perl: Argument list too long
par_dash_environment_too_big env_parallel: Error: Your environment is too big.
par_dash_environment_too_big env_parallel: Error: Try running this in a clean environment once:
par_dash_environment_too_big env_parallel: Error: env_parallel --record-env
par_dash_environment_too_big env_parallel: Error: And the use '--env _'
par_dash_environment_too_big env_parallel: Error: For details see: man env_parallel
-par_dash_environment_too_big dash: 132: perl: Argument list too long
+par_dash_environment_too_big dash: 133: perl: Argument list too long
par_dash_environment_too_big env_parallel: Error: Your environment is too big.
par_dash_environment_too_big env_parallel: Error: Try running this in a clean environment once:
par_dash_environment_too_big env_parallel: Error: env_parallel --record-env
@@ -902,10 +974,6 @@ par_csh_man {+/}/{/..}.{+..} = {...}.{+...} = {+/}/{/...}.{+...}
par_csh_man ;login: The USENIX Magazine, February 2011:42-47.
par_csh_man O. Tange (2011): GNU Parallel - The Command-Line Power Tool,
par_csh_man ### From man env_parallel
-par_csh_man &
-par_csh_man &
-par_csh_man &
-par_csh_man &
par_csh_man --colsep regexp Split input on regexp for positional replacements
par_csh_man --nonall Run the given command with no arguments on all sshlogins
par_csh_man --onall Run the given command with argument on all sshlogins
@@ -918,10 +986,6 @@ par_csh_man -S sshlogin Example: foo@server.example.com
par_csh_man -X Multiple arguments with context replace
par_csh_man -j n Run n jobs in parallel
par_csh_man -k Keep same order
-par_csh_man =
-par_csh_man =
-par_csh_man =
-par_csh_man =
par_csh_man Academic tradition requires you to cite works you base your article on.
par_csh_man If you pay 10000 EUR you should feel free to use GNU Parallel without citing.
par_csh_man If you use programs that use GNU Parallel to process data for an article in a
@@ -944,14 +1008,22 @@ par_csh_man exit value 2 should be 2
par_csh_man parallel [options] [command [arguments]] (::: arguments|:::: argfile(s))...
par_csh_man parallel [options] [command [arguments]] < list_of_arguments
par_csh_man scientific publication, please cite:
+par_csh_man too
+par_csh_man too
+par_csh_man too
+par_csh_man too
par_csh_man variables with = & " work
par_csh_man variables with = & " work
par_csh_man variables with = & " work
par_csh_man variables with = & " work
-par_csh_man with
-par_csh_man with
-par_csh_man with
-par_csh_man with
+par_csh_man with=&"'
+par_csh_man with=&"'
+par_csh_man with=&"'
+par_csh_man with=&"'
+par_csh_man work,
+par_csh_man work,
+par_csh_man work,
+par_csh_man work,
par_csh_man {3} {3.} {3/} {3/.} {=3 perl code =} Positional replacement strings
par_csh_man {} {.} {/} {/.} {#} {%} {= perl code =} Replacement strings
par_csh_funky 3 arg alias_works
@@ -1032,64 +1104,72 @@ par_bash_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar
par_bash_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar myecho myvar myarr 1 myfun baz
par_bash_man ### bash
par_bash_man ### From man env_parallel
-par_bash_man aliases with = & " work
-par_bash_man aliases with = & " work
-par_bash_man aliases with = & " work
-par_bash_man aliases with = & " work
+par_bash_man aliases with = & " ! ' work
+par_bash_man aliases with = & " ! ' work
+par_bash_man aliases with = & " ! ' work
+par_bash_man aliases with = & " ! ' work
+par_bash_man aliases with = & " ! ' work
+par_bash_man multiline
+par_bash_man aliases with = & " ! ' work
par_bash_man env_parallel: Warning: Alias 'multiline' contains newline.
par_bash_man env_parallel: Warning: Make sure the command has at least one newline after 'multiline'.
par_bash_man env_parallel: Warning: See BUGS in 'man env_parallel'.
par_bash_man multiline
-par_bash_man aliases with = & " work
+par_bash_man aliases with = & " ! ' work
par_bash_man but only when followed by a newline
par_bash_man env_parallel: Warning: Alias 'multiline' contains newline.
par_bash_man env_parallel: Warning: Make sure the command has at least one newline after 'multiline'.
par_bash_man env_parallel: Warning: See BUGS in 'man env_parallel'.
par_bash_man multiline
-par_bash_man aliases with = & " work
+par_bash_man aliases with = & " ! ' work
par_bash_man but only when followed by a newline
par_bash_man env_parallel: Warning: Alias 'multiline' contains newline.
par_bash_man env_parallel: Warning: Make sure the command has at least one newline after 'multiline'.
par_bash_man env_parallel: Warning: See BUGS in 'man env_parallel'.
par_bash_man multiline
-par_bash_man aliases with = & " work
+par_bash_man aliases with = & " ! ' work
par_bash_man but only when followed by a newline
par_bash_man env_parallel: Warning: Alias 'multiline' contains newline.
par_bash_man env_parallel: Warning: Make sure the command has at least one newline after 'multiline'.
par_bash_man env_parallel: Warning: See BUGS in 'man env_parallel'.
par_bash_man multiline
-par_bash_man aliases with = & " work
+par_bash_man aliases with = & " ! ' work
par_bash_man but only when followed by a newline
-par_bash_man functions with = & " work
-par_bash_man functions with = & " work
-par_bash_man functions with = & " work
-par_bash_man functions with = & " work
-par_bash_man variables with = & " work
-par_bash_man variables with = & " work
-par_bash_man variables with = & " work
-par_bash_man variables with = & " work
+par_bash_man functions with = & " ! ' work
+par_bash_man functions with = & " ! ' work
+par_bash_man functions with = & " ! ' work
+par_bash_man functions with = & " ! ' work
+par_bash_man functions with = & " ! ' work
+par_bash_man variables with = & " ! ' work
+par_bash_man variables with = & " ! ' work
+par_bash_man variables with = & " ! ' work
+par_bash_man variables with = & " ! ' work
+par_bash_man variables with = & " ! ' work
par_bash_man multiline
-par_bash_man variables with = & " work
+par_bash_man variables with = & " ! ' work
par_bash_man multiline
-par_bash_man variables with = & " work
+par_bash_man variables with = & " ! ' work
par_bash_man multiline
-par_bash_man variables with = & " work
+par_bash_man variables with = & " ! ' work
par_bash_man multiline
-par_bash_man variables with = & " work
+par_bash_man variables with = & " ! ' work
+par_bash_man multiline
+par_bash_man variables with = & " ! ' work
+par_bash_man arrays with = & " ! ' work, too
par_bash_man arrays
-par_bash_man with = & "
+par_bash_man with = & " ! '
par_bash_man work,
par_bash_man too
par_bash_man arrays
-par_bash_man with = & "
+par_bash_man with = & " ! '
par_bash_man work,
par_bash_man too
par_bash_man arrays
-par_bash_man with = & "
+par_bash_man with = & " ! '
par_bash_man work,
par_bash_man too
par_bash_man arrays
-par_bash_man with = & "
+par_bash_man with = & " ! '
par_bash_man work,
par_bash_man too
par_bash_man exit value 2 should be 2
@@ -1238,30 +1318,36 @@ par_ash_parset 2
par_ash_parset 3
par_ash_man ### ash
par_ash_man ### From man env_parallel
-par_ash_man aliases with = & " work
-par_ash_man aliases with = & " work
-par_ash_man aliases with = & " work
-par_ash_man aliases with = & " work
+par_ash_man aliases with = & " ! ' work
+par_ash_man aliases with = & " ! ' work
+par_ash_man aliases with = & " ! ' work
+par_ash_man aliases with = & " ! ' work
+par_ash_man aliases with = & " ! ' work
par_ash_man multiline
-par_ash_man aliases with = & " work
+par_ash_man aliases with = & " ! ' work
par_ash_man multiline
-par_ash_man aliases with = & " work
+par_ash_man aliases with = & " ! ' work
par_ash_man multiline
-par_ash_man aliases with = & " work
+par_ash_man aliases with = & " ! ' work
par_ash_man multiline
-par_ash_man aliases with = & " work
-par_ash_man variables with = & " work
-par_ash_man variables with = & " work
-par_ash_man variables with = & " work
-par_ash_man variables with = & " work
+par_ash_man aliases with = & " ! ' work
par_ash_man multiline
-par_ash_man variables with = & " work
+par_ash_man aliases with = & " ! ' work
+par_ash_man variables with = & " ! ' work
+par_ash_man variables with = & " ! ' work
+par_ash_man variables with = & " ! ' work
+par_ash_man variables with = & " ! ' work
+par_ash_man variables with = & " ! ' work
par_ash_man multiline
-par_ash_man variables with = & " work
+par_ash_man variables with = & " ! ' work
par_ash_man multiline
-par_ash_man variables with = & " work
+par_ash_man variables with = & " ! ' work
par_ash_man multiline
-par_ash_man variables with = & " work
+par_ash_man variables with = & " ! ' work
+par_ash_man multiline
+par_ash_man variables with = & " ! ' work
+par_ash_man multiline
+par_ash_man variables with = & " ! ' work
par_ash_man exit value 2 should be 2
par_ash_man Unknown option: no-such-option
par_ash_man exit value 255 should be 255
@@ -1276,25 +1362,25 @@ par_ash_environment_too_big OK_bigvar_remote
par_ash_environment_too_big OK_bigvar_quote
par_ash_environment_too_big OK_bigvar_quote_remote
par_ash_environment_too_big Rest should fail
-par_ash_environment_too_big ash: 132: perl: Argument list too long
+par_ash_environment_too_big ash: 133: perl: Argument list too long
par_ash_environment_too_big env_parallel: Error: Your environment is too big.
par_ash_environment_too_big env_parallel: Error: Try running this in a clean environment once:
par_ash_environment_too_big env_parallel: Error: env_parallel --record-env
par_ash_environment_too_big env_parallel: Error: And the use '--env _'
par_ash_environment_too_big env_parallel: Error: For details see: man env_parallel
-par_ash_environment_too_big ash: 132: perl: Argument list too long
+par_ash_environment_too_big ash: 133: perl: Argument list too long
par_ash_environment_too_big env_parallel: Error: Your environment is too big.
par_ash_environment_too_big env_parallel: Error: Try running this in a clean environment once:
par_ash_environment_too_big env_parallel: Error: env_parallel --record-env
par_ash_environment_too_big env_parallel: Error: And the use '--env _'
par_ash_environment_too_big env_parallel: Error: For details see: man env_parallel
-par_ash_environment_too_big ash: 132: perl: Argument list too long
+par_ash_environment_too_big ash: 133: perl: Argument list too long
par_ash_environment_too_big env_parallel: Error: Your environment is too big.
par_ash_environment_too_big env_parallel: Error: Try running this in a clean environment once:
par_ash_environment_too_big env_parallel: Error: env_parallel --record-env
par_ash_environment_too_big env_parallel: Error: And the use '--env _'
par_ash_environment_too_big env_parallel: Error: For details see: man env_parallel
-par_ash_environment_too_big ash: 132: perl: Argument list too long
+par_ash_environment_too_big ash: 133: perl: Argument list too long
par_ash_environment_too_big env_parallel: Error: Your environment is too big.
par_ash_environment_too_big env_parallel: Error: Try running this in a clean environment once:
par_ash_environment_too_big env_parallel: Error: env_parallel --record-env
diff --git a/testsuite/wanted-results/parallel-local-ssh9 b/testsuite/wanted-results/parallel-local-ssh9
new file mode 100644
index 00000000..a28d30fe
--- /dev/null
+++ b/testsuite/wanted-results/parallel-local-ssh9
@@ -0,0 +1,69 @@
+par_zsh_embed --embed
+par_zsh_embed Redirect the output to a file and add your changes at the end:
+par_zsh_embed /usr/local/bin/parallel --embed > new_script
+par_zsh_embed Put
+par_zsh_embed your
+par_zsh_embed code
+par_zsh_embed here
+par_zsh_embed parallel_OK
+par_zsh_embed _which:12: argument list too long: perl
+par_zsh_embed env_parallel: Error: Your environment is too big.
+par_zsh_embed env_parallel: Error: Try running this in a clean environment once:
+par_zsh_embed env_parallel: Error: env_parallel --record-env
+par_zsh_embed env_parallel: Error: And the use '--env _'
+par_zsh_embed env_parallel: Error: For details see: man env_parallel
+par_zsh_embed ParsetOK
+par_tcsh_embed Not implemented
+par_sh_embed --embed
+par_sh_embed Redirect the output to a file and add your changes at the end:
+par_sh_embed /usr/local/bin/parallel --embed > new_script
+par_sh_embed Put
+par_sh_embed your
+par_sh_embed code
+par_sh_embed here
+par_sh_embed parallel_OK
+par_sh_embed env_parallel_OK
+par_sh_embed ./parallel-embed: 275: ./parallel-embed: parallel: not found
+par_sh_embed rm: missing operand
+par_sh_embed Try 'rm --help' for more information.
+par_sh_embed
+par_ksh_embed --embed
+par_ksh_embed Redirect the output to a file and add your changes at the end:
+par_ksh_embed /usr/local/bin/parallel --embed > new_script
+par_ksh_embed Put
+par_ksh_embed your
+par_ksh_embed code
+par_ksh_embed here
+par_ksh_embed parallel_OK
+par_ksh_embed env_parallel: Error: parallel must be in $PATH.
+par_ksh_embed ParsetOK
+par_fish_embed Not implemented
+par_csh_embed Not implemented
+par_bash_embed --embed
+par_bash_embed Redirect the output to a file and add your changes at the end:
+par_bash_embed /usr/local/bin/parallel --embed > new_script
+par_bash_embed Put
+par_bash_embed your
+par_bash_embed code
+par_bash_embed here
+par_bash_embed parallel_OK
+par_bash_embed /usr/local/bin/env_parallel.bash: line XXX: /usr/bin/perl: Argument list too long
+par_bash_embed env_parallel: Error: Your environment is too big.
+par_bash_embed env_parallel: Error: Try running this in a clean environment once:
+par_bash_embed env_parallel: Error: env_parallel --record-env
+par_bash_embed env_parallel: Error: And the use '--env _'
+par_bash_embed env_parallel: Error: For details see: man env_parallel
+par_bash_embed ParsetOK
+par_ash_embed --embed
+par_ash_embed Redirect the output to a file and add your changes at the end:
+par_ash_embed /usr/local/bin/parallel --embed > new_script
+par_ash_embed Put
+par_ash_embed your
+par_ash_embed code
+par_ash_embed here
+par_ash_embed parallel_OK
+par_ash_embed env_parallel_OK
+par_ash_embed ./parallel-embed: 275: ./parallel-embed: parallel: not found
+par_ash_embed rm: missing operand
+par_ash_embed Try 'rm --help' for more information.
+par_ash_embed