From 78fade1e62c13274b387d458b9c298fac105ef0f Mon Sep 17 00:00:00 2001 From: Ole Tange Date: Thu, 25 Jan 2018 03:48:16 +0100 Subject: [PATCH] parallel: --embed initial version. Incompatible with env_*. env_parallel.*: Minor bugfixes. parallel: More commenting. --- src/env_parallel.ash | 5 +- src/env_parallel.bash | 10 +- src/env_parallel.dash | 5 +- src/env_parallel.sh | 5 +- src/env_parallel.zsh | 38 +- src/niceload | 2 +- src/parallel | 131 +++++- src/parallel.pod | 24 +- src/parallel_alternatives.pod | 21 + src/parset.pod | 2 +- src/sql | 2 +- testsuite/tests-to-run/parallel-local-ssh7.sh | 271 ++++++++---- testsuite/tests-to-run/parallel-local-ssh9.sh | 131 ++++++ testsuite/tests-to-run/parallel-local12.sh | 5 + testsuite/wanted-results/parallel-local-10s | 4 +- testsuite/wanted-results/parallel-local-ssh7 | 406 +++++++++++------- testsuite/wanted-results/parallel-local-ssh9 | 69 +++ 17 files changed, 841 insertions(+), 290 deletions(-) create mode 100644 testsuite/tests-to-run/parallel-local-ssh9.sh create mode 100644 testsuite/wanted-results/parallel-local-ssh9 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