parallel: --embed initial version. Incompatible with env_*.

env_parallel.*: Minor bugfixes.
parallel: More commenting.
This commit is contained in:
Ole Tange 2018-01-25 03:48:16 +01:00
parent b597f4166f
commit 78fade1e62
17 changed files with 841 additions and 290 deletions

View file

@ -124,6 +124,7 @@ env_parallel() {
# ll is an alias for ls -l (in ash) # ll is an alias for ls -l (in ash)
# bash is a tracked alias for /bin/bash # bash is a tracked alias for /bin/bash
# true is a shell builtin # true is a shell builtin
# myfunc is a function
# which is /usr/bin/which # which is /usr/bin/which
# which is hashed (/usr/bin/which) # which is hashed (/usr/bin/which)
# aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' # aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
@ -131,6 +132,7 @@ env_parallel() {
type "$@" | type "$@" |
perl -pe '$exit += (s/ is an alias for .*// || perl -pe '$exit += (s/ is an alias for .*// ||
s/ is aliased to .*// || s/ is aliased to .*// ||
s/ is a function// ||
s/ is a shell builtin// || s/ is a shell builtin// ||
s/.* is hashed .(\S+).$/$1/ || s/.* is hashed .(\S+).$/$1/ ||
s/.* is (a tracked alias for )?//); s/.* is (a tracked alias for )?//);
@ -193,7 +195,6 @@ env_parallel() {
$_list_function_BODIES; $_list_function_BODIES;
$_list_variable_VALUES; $_list_variable_VALUES;
`" `"
export PARALLEL_ENV export PARALLEL_ENV
unset _list_alias_BODIES unset _list_alias_BODIES
unset _list_variable_VALUES unset _list_variable_VALUES
@ -202,7 +203,7 @@ env_parallel() {
unset _ignore_UNDERSCORE unset _ignore_UNDERSCORE
# Test if environment is too big # Test if environment is too big
if `_which true` >/dev/null 2>/dev/null ; then if `_which true` >/dev/null 2>/dev/null ; then
`_which parallel` "$@"; parallel "$@";
_parallel_exit_CODE=$? _parallel_exit_CODE=$?
unset PARALLEL_ENV; unset PARALLEL_ENV;
return $_parallel_exit_CODE return $_parallel_exit_CODE

View file

@ -143,14 +143,20 @@ env_parallel() {
} }
_which() { _which() {
# type returns: # type returns:
# ll is an alias for ls -l (in ash)
# bash is a tracked alias for /bin/bash # bash is a tracked alias for /bin/bash
# true is a shell builtin # 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 /usr/bin/which
# which is hashed (/usr/bin/which) # which is hashed (/usr/bin/which)
# aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' # aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
# Return 0 if found, 1 otherwise # Return 0 if found, 1 otherwise
type "$@" | 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 a shell builtin// ||
s/.* is hashed .(\S+).$/$1/ || s/.* is hashed .(\S+).$/$1/ ||
s/.* is (a tracked alias for )?//); s/.* is (a tracked alias for )?//);
@ -230,7 +236,7 @@ env_parallel() {
unset _ignore_UNDERSCORE unset _ignore_UNDERSCORE
# Test if environment is too big # Test if environment is too big
if [ "`_which true`" == "$_which_true" ] ; then if [ "`_which true`" == "$_which_true" ] ; then
`_which parallel` "$@"; parallel "$@";
_parallel_exit_CODE=$? _parallel_exit_CODE=$?
unset PARALLEL_ENV; unset PARALLEL_ENV;
return $_parallel_exit_CODE return $_parallel_exit_CODE

View file

@ -124,6 +124,7 @@ env_parallel() {
# ll is an alias for ls -l (in ash) # ll is an alias for ls -l (in ash)
# bash is a tracked alias for /bin/bash # bash is a tracked alias for /bin/bash
# true is a shell builtin # true is a shell builtin
# myfunc is a function
# which is /usr/bin/which # which is /usr/bin/which
# which is hashed (/usr/bin/which) # which is hashed (/usr/bin/which)
# aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' # aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
@ -131,6 +132,7 @@ env_parallel() {
type "$@" | type "$@" |
perl -pe '$exit += (s/ is an alias for .*// || perl -pe '$exit += (s/ is an alias for .*// ||
s/ is aliased to .*// || s/ is aliased to .*// ||
s/ is a function// ||
s/ is a shell builtin// || s/ is a shell builtin// ||
s/.* is hashed .(\S+).$/$1/ || s/.* is hashed .(\S+).$/$1/ ||
s/.* is (a tracked alias for )?//); s/.* is (a tracked alias for )?//);
@ -193,7 +195,6 @@ env_parallel() {
$_list_function_BODIES; $_list_function_BODIES;
$_list_variable_VALUES; $_list_variable_VALUES;
`" `"
export PARALLEL_ENV export PARALLEL_ENV
unset _list_alias_BODIES unset _list_alias_BODIES
unset _list_variable_VALUES unset _list_variable_VALUES
@ -202,7 +203,7 @@ env_parallel() {
unset _ignore_UNDERSCORE unset _ignore_UNDERSCORE
# Test if environment is too big # Test if environment is too big
if `_which true` >/dev/null 2>/dev/null ; then if `_which true` >/dev/null 2>/dev/null ; then
`_which parallel` "$@"; parallel "$@";
_parallel_exit_CODE=$? _parallel_exit_CODE=$?
unset PARALLEL_ENV; unset PARALLEL_ENV;
return $_parallel_exit_CODE return $_parallel_exit_CODE

View file

@ -124,6 +124,7 @@ env_parallel() {
# ll is an alias for ls -l (in ash) # ll is an alias for ls -l (in ash)
# bash is a tracked alias for /bin/bash # bash is a tracked alias for /bin/bash
# true is a shell builtin # true is a shell builtin
# myfunc is a function
# which is /usr/bin/which # which is /usr/bin/which
# which is hashed (/usr/bin/which) # which is hashed (/usr/bin/which)
# aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' # aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
@ -131,6 +132,7 @@ env_parallel() {
type "$@" | type "$@" |
perl -pe '$exit += (s/ is an alias for .*// || perl -pe '$exit += (s/ is an alias for .*// ||
s/ is aliased to .*// || s/ is aliased to .*// ||
s/ is a function// ||
s/ is a shell builtin// || s/ is a shell builtin// ||
s/.* is hashed .(\S+).$/$1/ || s/.* is hashed .(\S+).$/$1/ ||
s/.* is (a tracked alias for )?//); s/.* is (a tracked alias for )?//);
@ -193,7 +195,6 @@ env_parallel() {
$_list_function_BODIES; $_list_function_BODIES;
$_list_variable_VALUES; $_list_variable_VALUES;
`" `"
export PARALLEL_ENV export PARALLEL_ENV
unset _list_alias_BODIES unset _list_alias_BODIES
unset _list_variable_VALUES unset _list_variable_VALUES
@ -202,7 +203,7 @@ env_parallel() {
unset _ignore_UNDERSCORE unset _ignore_UNDERSCORE
# Test if environment is too big # Test if environment is too big
if `_which true` >/dev/null 2>/dev/null ; then if `_which true` >/dev/null 2>/dev/null ; then
`_which parallel` "$@"; parallel "$@";
_parallel_exit_CODE=$? _parallel_exit_CODE=$?
unset PARALLEL_ENV; unset PARALLEL_ENV;
return $_parallel_exit_CODE return $_parallel_exit_CODE

View file

@ -94,6 +94,30 @@ env_parallel() {
print $vars ? "($vars)" : "(.*)"; 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 if which parallel | grep 'no parallel in' >/dev/null; then
echo 'env_parallel: Error: parallel must be in $PATH.' >&2 echo 'env_parallel: Error: parallel must be in $PATH.' >&2
@ -162,8 +186,8 @@ env_parallel() {
unset _grep_REGEXP unset _grep_REGEXP
unset _ignore_UNDERSCORE unset _ignore_UNDERSCORE
# Test if environment is too big # Test if environment is too big
if `which /bin/true` >/dev/null 2>/dev/null ; then if `_which /bin/true` >/dev/null 2>/dev/null ; then
`which parallel` "$@"; parallel "$@";
_parallel_exit_CODE=$? _parallel_exit_CODE=$?
unset PARALLEL_ENV; unset PARALLEL_ENV;
return $_parallel_exit_CODE return $_parallel_exit_CODE
@ -227,8 +251,8 @@ _parset_main() {
} }
exit $exitval; exit $exitval;
' || return 255 ' || return 255
if echo "$_parset_name" | grep -E ',| ' >/dev/null ; then if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then
# $1 contains , or space # $_parset_name contains , or space
# Split on , or space to get the names # Split on , or space to get the names
eval "$( eval "$(
# Compute results into files # Compute results into files
@ -241,9 +265,9 @@ _parset_main() {
) )
)" )"
else else
# $1 contains no space or , # $_parset_name does not contain , or space
# => $1 is the name of the array to put data into # => $_parset_name is the name of the array to put data into
# Supported in: bash # Supported in: bash zsh ksh
# Arrays do not work in: ash dash # Arrays do not work in: ash dash
eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" | eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" |
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )" perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )"

View file

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

View file

@ -134,7 +134,6 @@ drain_job_queue();
::debug("init", "Done draining\n"); ::debug("init", "Done draining\n");
reaper(); reaper();
::debug("init", "Done reaping\n"); ::debug("init", "Done reaping\n");
::debug("init", "Cleaning\n");
if($Global::semaphore) { if($Global::semaphore) {
$sem->release(); $sem->release();
} }
@ -183,8 +182,12 @@ sub set_input_source_header {
} }
sub max_jobs_running { 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) { if(not $Global::max_jobs_running) {
# Compute $Global::max_jobs_running
for my $sshlogin (values %Global::host) { for my $sshlogin (values %Global::host) {
$sshlogin->max_jobs_running(); $sshlogin->max_jobs_running();
} }
@ -193,6 +196,9 @@ sub max_jobs_running {
} }
sub halt { sub halt {
# Compute exit value,
# wait for children to complete
# and exit
if($opt::halt and $Global::halt_when ne "never") { if($opt::halt and $Global::halt_when ne "never") {
if(not defined $Global::halt_exitstatus) { if(not defined $Global::halt_exitstatus) {
if($Global::halt_pct) { if($Global::halt_pct) {
@ -212,6 +218,12 @@ sub halt {
sub __PIPE_MODE__ {} sub __PIPE_MODE__ {}
sub pipepart_setup { 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) { if($opt::tee) {
# Prepend each command with # Prepend each command with
# cat file # cat file
@ -256,31 +268,39 @@ sub pipepart_setup {
} }
sub pipe_tee_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; my @fifos;
for(1..$Global::JobQueue->total_jobs()) { for(1..$Global::JobQueue->total_jobs()) {
push @fifos, tmpfifo(); 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()){ if(not fork()){
# Let tee inherit our stdin # Let tee inherit our stdin
# and redirect stdout to null # and redirect stdout to null
open STDOUT, ">","/dev/null"; open STDOUT, ">","/dev/null";
exec "tee",@fifos; exec "tee",@fifos;
} }
# Make cats for each fifo # Make cats for each fifo
# cat t1 | grep 1 # cat fifo1 | grep 1
# cat t2 | grep 2 # cat fifo2 | grep 2
# cat t3 | grep 3 # cat fifo3 | grep 3
# cat t4 | grep 4 # cat fifo4 | grep 4
# cat t5 | grep 5 # cat fifo5 | grep 5
# Remove the tmpfifo as soon as it is open # Remove the tmpfifo as soon as it is open
# 'exec' saves a process # 'exec' saves a process
@Global::cat_prepends = map { "(rm $_; exec cat) < $_" } @fifos; @Global::cat_prepends = map { "(rm $_; exec cat) < $_" } @fifos;
} }
sub pipe_part_files { sub pipe_part_files {
# Given the bigfile
# find header and split positions
# make commands that 'cat's the partial file
# Input: # Input:
# $file = the file to read # $file = the file to read
# Returns: # Returns:
@ -304,6 +324,7 @@ sub pipe_part_files {
} }
sub find_header { sub find_header {
# Compute the header based on $opt::header
# Input: # Input:
# $buf_ref = reference to read-in buffer # $buf_ref = reference to read-in buffer
# $fh = filehandle to read from # $fh = filehandle to read from
@ -329,6 +350,7 @@ sub find_header {
} }
sub find_split_positions { sub find_split_positions {
# Find positions in bigfile where recend is followed by recstart
# Input: # Input:
# $file = the file to read # $file = the file to read
# $block = (minimal) --block-size of each chunk # $block = (minimal) --block-size of each chunk
@ -356,8 +378,10 @@ sub find_split_positions {
for(my $pos = $block+$headerlen; $pos < $size; $pos += $block) { for(my $pos = $block+$headerlen; $pos < $size; $pos += $block) {
my $buf; my $buf;
if($recendrecstart eq "") { if($recendrecstart eq "") {
# records ends anywhere
push(@pos,$pos); push(@pos,$pos);
} else { } else {
# Seek the the block start
seek($fh, $pos, 0) || die; seek($fh, $pos, 0) || die;
while(read($fh,substr($buf,length $buf,0),$dd_block_size)) { while(read($fh,substr($buf,length $buf,0),$dd_block_size)) {
if($opt::regexp) { if($opt::regexp) {
@ -389,6 +413,7 @@ sub find_split_positions {
} }
sub cat_partial { sub cat_partial {
# Efficient command to copy from byte X to byte Y
# Input: # Input:
# $file = the file to read # $file = the file to read
# ($start, $end, [$start2, $end2, ...]) = start byte, end byte # ($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 # Efficient command to copy $start..$end, $start2..$end2, ... to stdout
my($file, @start_end) = @_; my($file, @start_end) = @_;
my($start, $i); my($start, $i);
# Convert start_end to start_len # Convert (start,end) to (start,len)
my @start_len = map { my @start_len = map {
if(++$i % 2) { $start = $_; } else { $_-$start } if(++$i % 2) { $start = $_; } else { $_-$start }
} @start_end; } @start_end;
@ -1049,6 +1074,7 @@ sub options_hash {
"pipepart|pipe-part" => \$opt::pipepart, "pipepart|pipe-part" => \$opt::pipepart,
"tee" => \$opt::tee, "tee" => \$opt::tee,
"hgrp|hostgrp|hostgroup|hostgroups" => \$opt::hostgroups, "hgrp|hostgrp|hostgroup|hostgroups" => \$opt::hostgroups,
"embed" => \$opt::embed,
); );
} }
@ -1117,6 +1143,7 @@ sub parse_options {
wait_and_exit(255); wait_and_exit(255);
} }
$Global::cshell = $Global::shell =~ m:/csh:; $Global::cshell = $Global::shell =~ m:/csh:;
if(defined $opt::X) { $Global::ContextReplace = 1; } if(defined $opt::X) { $Global::ContextReplace = 1; }
if(defined $opt::silent) { $Global::verbose = 0; } if(defined $opt::silent) { $Global::verbose = 0; }
if(defined $opt::null) { $/ = "\0"; } if(defined $opt::null) { $/ = "\0"; }
@ -1141,6 +1168,7 @@ sub parse_options {
$ENV{'PARALLEL_RSYNC_OPTS'} || '-rlDzR'; $ENV{'PARALLEL_RSYNC_OPTS'} || '-rlDzR';
$opt::nice ||= 0; $opt::nice ||= 0;
if(defined $opt::help) { usage(); exit(0); } if(defined $opt::help) { usage(); exit(0); }
if(defined $opt::embed) { embed(); exit(0); }
if(defined $opt::sqlandworker) { if(defined $opt::sqlandworker) {
$opt::sqlmaster = $opt::sqlworker = $opt::sqlandworker; $opt::sqlmaster = $opt::sqlworker = $opt::sqlandworker;
} }
@ -1388,7 +1416,7 @@ sub check_invalid_option_combinations {
sub init_globals { sub init_globals {
# Defaults: # Defaults:
$Global::version = 20180122; $Global::version = 20180123;
$Global::progname = 'parallel'; $Global::progname = 'parallel';
$Global::infinity = 2**31; $Global::infinity = 2**31;
$Global::debug = 0; $Global::debug = 0;
@ -4246,6 +4274,79 @@ sub show_limits {
"press CTRL-D or CTRL-C\n"); "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 <http://www.gnu.org/licenses/>
# 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__ {} sub __GENERIC_COMMON_FUNCTION__ {}
@ -4516,8 +4617,12 @@ sub spacefree {
my $spaces = shift; my $spaces = shift;
my $s = shift; my $s = shift;
$s =~ s/#.*//mg; $s =~ s/#.*//mg;
if($spaces) { if(1 == $spaces) {
$s =~ s/\s+/ /mg; $s =~ s/\s+/ /mg;
} elsif(2 == $spaces) {
# Keep newlines
$s =~ s/\n\n+/\n/sg;
$s =~ s/[ \t]+/ /mg;
} else { } else {
$s =~ s/\s//mg; $s =~ s/\s//mg;
} }

View file

@ -646,6 +646,20 @@ If I<eof-str> 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. B<-E> nor B<-e> is used, no end of file string is used.
=item B<--embed> (alpha testing)
Embed GNU B<parallel> in a shell script. If you need to distribute your
script to someone who does not want to install GNU B<parallel> you can
embed GNU B<parallel> in your own shell script:
parallel --embed > new_script
After which you add your code at the end of B<new_script>. This is tested
on B<ash>, B<bash>, B<dash>, B<ksh>, B<sh>, and B<zsh>.
It is not compatible with B<env_parallel>, B<parset>, and B<env_parset>.
=item B<--env> I<var> =item B<--env> I<var>
Copy environment variable I<var>. This will copy I<var> to the Copy environment variable I<var>. This will copy I<var> 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 sources (stored in columns V1 .. Vn), and the output (stored in
columns Stdout and Stderr). columns Stdout and Stderr).
If I<DBURL> is prepended with '+' GNU B<parallel> assumes the table is If I<DBURL> is prepended with '+' GNU B<parallel> assumes the table is
already made with the correct columns and appends the jobs to it. 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. setting $TMPDIR.
=item B<--tmux> =item B<--tmux> (Long beta testing)
Use B<tmux> for output. Start a B<tmux> session and run each job in a Use B<tmux> for output. Start a B<tmux> session and run each job in a
window in that session. No other output will be produced. window in that session. No other output will be produced.
=item B<--tmuxpane> =item B<--tmuxpane> (Long beta testing)
Use B<tmux> for output but put output into panes in the first window. Use B<tmux> for output but put output into panes in the first window.
Useful if you want to monitor the progress of less than 100 concurrent Useful if you want to monitor the progress of less than 100 concurrent
@ -4604,6 +4617,11 @@ because I<command> is an alias or a function. If it is a function you
need to B<export -f> the function first or use B<env_parallel>. An need to B<export -f> the function first or use B<env_parallel>. An
alias will only work if you use B<env_parallel>. alias will only work if you use B<env_parallel>.
=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 =head1 REPORTING BUGS

View file

@ -1367,6 +1367,27 @@ and fails on B<pyargs traceroute gnu.org fsf.org>.
parallel seq ::: 1 2 3 4 5 6 parallel seq ::: 1 2 3 4 5 6
=head2 DIFFERENCES BETWEEN concurrently AND GNU Parallel
B<concurrently> 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<concurrently> 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 =head2 Todo
machma. Requires Go >= 1.7. machma. Requires Go >= 1.7.

View file

@ -11,7 +11,7 @@ parset - set shell variables in parallel
B<parset> I<variablename> [options for GNU Parallel] B<parset> I<variablename> [options for GNU Parallel]
B<env_parset> I<variablename> [options for GNU Parallel] (alpha testing) B<env_parset> I<variablename> [options for GNU Parallel] (beta testing)
=head1 DESCRIPTION =head1 DESCRIPTION

View file

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

View file

@ -16,33 +16,41 @@ par_ash_man() {
. `which env_parallel.ash`; . `which env_parallel.ash`;
alias myecho='echo aliases with \= \& \"' alias myecho='echo aliases with \= \& \" \!'" \'"
myecho work
env_parallel myecho ::: work env_parallel myecho ::: work
env_parallel -S server myecho ::: work env_parallel -S server myecho ::: work
env_parallel --env myecho myecho ::: work env_parallel --env myecho myecho ::: work
env_parallel --env myecho -S server myecho ::: work env_parallel --env myecho -S server myecho ::: work
alias multiline='echo multiline alias multiline='echo multiline
echo aliases with \= \& \"' echo aliases with \= \& \" \!'" \'"
multiline work
env_parallel multiline ::: work env_parallel multiline ::: work
env_parallel -S server multiline ::: work env_parallel -S server multiline ::: work
env_parallel --env multiline multiline ::: work env_parallel --env multiline multiline ::: work
env_parallel --env multiline -S server multiline ::: work env_parallel --env multiline -S server multiline ::: work
alias multiline="dummy" alias multiline="dummy"
myvar='variables with = & "' # Functions are not supported in ash
env_parallel echo '$myvar' ::: work
env_parallel -S server echo '$myvar' ::: work myvar='variables with = & " !'" '"
env_parallel --env myvar echo '$myvar' ::: work echo "$myvar" work
env_parallel --env myvar -S server 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 multivar='multiline
variables with = & "' variables with = & " !'" '"
echo "$multivar" work
env_parallel echo '"$multivar"' ::: work env_parallel echo '"$multivar"' ::: work
env_parallel -S server echo '"$multivar"' ::: work env_parallel -S server echo '"$multivar"' ::: work
env_parallel --env multivar echo '"$multivar"' ::: work env_parallel --env multivar echo '"$multivar"' ::: work
env_parallel --env multivar -S server echo '"$multivar"' ::: work env_parallel --env multivar -S server echo '"$multivar"' ::: work
# Arrays are not supported in ash
env_parallel ::: true false true false env_parallel ::: true false true false
echo exit value $? should be 2 echo exit value $? should be 2
@ -60,15 +68,19 @@ par_bash_man() {
echo "### From man env_parallel" echo "### From man env_parallel"
. `which env_parallel.bash`; . `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 myecho ::: work
env_parallel -S server myecho ::: work env_parallel -S server myecho ::: work
env_parallel --env myecho myecho ::: work env_parallel --env myecho myecho ::: work
env_parallel --env myecho -S server myecho ::: work env_parallel --env myecho -S server myecho ::: work
# multiline aliases with when followed by newline
alias multiline='echo multiline alias multiline='echo multiline
echo aliases with \= \& \"' echo aliases with \= \& \" \!'" \'"
multiline work
env_parallel 'multiline {}; env_parallel 'multiline {};
echo but only when followed by a newline' ::: work echo but only when followed by a newline' ::: work
env_parallel -S server 'multiline {}; env_parallel -S server 'multiline {};
@ -78,31 +90,35 @@ par_bash_man() {
env_parallel --env multiline -S server 'multiline {}; env_parallel --env multiline -S server 'multiline {};
echo but only when followed by a newline' ::: work echo but only when followed by a newline' ::: work
alias multiline="dummy" alias multiline="dummy"
myfunc() { echo functions 'with = & "' $*; } myfunc() { echo functions 'with = & " !'" '" $*; }
myfunc work
env_parallel myfunc ::: work env_parallel myfunc ::: work
env_parallel -S server myfunc ::: work env_parallel -S server myfunc ::: work
env_parallel --env myfunc myfunc ::: work env_parallel --env myfunc myfunc ::: work
env_parallel --env myfunc -S server myfunc ::: work env_parallel --env myfunc -S server myfunc ::: work
myvar='variables with = & "' myvar='variables with = & " !'" '"
env_parallel echo '$myvar' ::: work echo "$myvar" work
env_parallel -S server echo '$myvar' ::: work env_parallel echo '"$myvar"' ::: work
env_parallel --env myvar echo '$myvar' ::: work env_parallel -S server echo '"$myvar"' ::: work
env_parallel --env myvar -S server echo '$myvar' ::: work env_parallel --env myvar echo '"$myvar"' ::: work
env_parallel --env myvar -S server echo '"$myvar"' ::: work
multivar='multiline multivar='multiline
variables with = & "' variables with = & " !'" '"
echo "$multivar" work
env_parallel echo '"$multivar"' ::: work env_parallel echo '"$multivar"' ::: work
env_parallel -S server echo '"$multivar"' ::: work env_parallel -S server echo '"$multivar"' ::: work
env_parallel --env multivar echo '"$multivar"' ::: work env_parallel --env multivar echo '"$multivar"' ::: work
env_parallel --env multivar -S server echo '"$multivar"' ::: work env_parallel --env multivar -S server echo '"$multivar"' ::: work
myarray=(arrays 'with = & "' work, too) myarray=(arrays 'with = & " !'" '" work, too)
env_parallel -k echo '${myarray[{}]}' ::: 0 1 2 3 echo "${myarray[0]}" "${myarray[1]}" "${myarray[2]}" "${myarray[3]}"
env_parallel -k -S server echo '${myarray[{}]}' ::: 0 1 2 3 env_parallel -k echo '"${myarray[{}]}"' ::: 0 1 2 3
env_parallel -k --env myarray echo '${myarray[{}]}' ::: 0 1 2 3 env_parallel -k -S server echo '"${myarray[{}]}"' ::: 0 1 2 3
env_parallel -k --env myarray -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 env_parallel ::: true false true false
echo exit value $? should be 2 echo exit value $? should be 2
@ -130,14 +146,17 @@ par_csh_man() {
# Functions not supported # Functions not supported
# TODO This does not work
# set myvar='variables with = & "'" '"
set myvar='variables with \= \& \"' set myvar='variables with \= \& \"'
env_parallel echo '$myvar' ::: work env_parallel echo '$myvar' ::: work
env_parallel -S server echo '$myvar' ::: work env_parallel -S server echo '$myvar' ::: work
env_parallel --env myvar echo '$myvar' ::: work env_parallel --env myvar echo '$myvar' ::: work
env_parallel --env myvar -S server echo '$myvar' ::: work env_parallel --env myvar -S server echo '$myvar' ::: work
# TODO this is not fixed # Space is not supported in arrays
set myarray=(arrays with\ \=\ \&\ \" work, too)
set myarray=(arrays with\=\&\""'" work, too)
env_parallel -k echo \$'{myarray[{}]}' ::: 1 2 3 4 env_parallel -k echo \$'{myarray[{}]}' ::: 1 2 3 4
env_parallel -k -S server 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 echo \$'{myarray[{}]}' ::: 1 2 3 4
@ -162,33 +181,41 @@ par_dash_man() {
. `which env_parallel.dash`; . `which env_parallel.dash`;
alias myecho='echo aliases with \= \& \"' alias myecho='echo aliases with \= \& \" \!'" \'"
myecho work
env_parallel myecho ::: work env_parallel myecho ::: work
env_parallel -S server myecho ::: work env_parallel -S server myecho ::: work
env_parallel --env myecho myecho ::: work env_parallel --env myecho myecho ::: work
env_parallel --env myecho -S server myecho ::: work env_parallel --env myecho -S server myecho ::: work
alias multiline='echo multiline alias multiline='echo multiline
echo aliases with \= \& \"' echo aliases with \= \& \" \!'" \'"
multiline work
env_parallel multiline ::: work env_parallel multiline ::: work
env_parallel -S server multiline ::: work env_parallel -S server multiline ::: work
env_parallel --env multiline multiline ::: work env_parallel --env multiline multiline ::: work
env_parallel --env multiline -S server multiline ::: work env_parallel --env multiline -S server multiline ::: work
alias multiline="dummy" alias multiline="dummy"
myvar='variables with = & "' # Functions are not supported in dash
env_parallel echo '$myvar' ::: work
env_parallel -S server echo '$myvar' ::: work myvar='variables with = & " !'" '"
env_parallel --env myvar echo '$myvar' ::: work echo "$myvar" work
env_parallel --env myvar -S server 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 multivar='multiline
variables with = & "' variables with = & " !'" '"
echo "$multivar" work
env_parallel echo '"$multivar"' ::: work env_parallel echo '"$multivar"' ::: work
env_parallel -S server echo '"$multivar"' ::: work env_parallel -S server echo '"$multivar"' ::: work
env_parallel --env multivar echo '"$multivar"' ::: work env_parallel --env multivar echo '"$multivar"' ::: work
env_parallel --env multivar -S server echo '"$multivar"' ::: work env_parallel --env multivar -S server echo '"$multivar"' ::: work
# Arrays are not supported in dash
env_parallel ::: true false true false env_parallel ::: true false true false
echo exit value $? should be 2 echo exit value $? should be 2
@ -204,27 +231,41 @@ par_fish_man() {
myscript=$(cat <<'_EOF' myscript=$(cat <<'_EOF'
echo "### From man env_parallel" echo "### From man env_parallel"
alias myecho='echo aliases with \= \& \"' alias myecho='echo aliases with \= \& \" \!'" \'"
myecho work
env_parallel myecho ::: work env_parallel myecho ::: work
env_parallel -S server myecho ::: work env_parallel -S server myecho ::: work
env_parallel --env myecho myecho ::: work env_parallel --env myecho myecho ::: work
env_parallel --env myecho -S server myecho ::: work env_parallel --env myecho -S server myecho ::: work
# multiline aliases does not work in fish
function myfunc function myfunc
echo functions with \= \& \" $argv echo functions 'with = & " !'" '" $argv;
end end
myfunc work
env_parallel myfunc ::: work env_parallel myfunc ::: work
env_parallel -S server myfunc ::: work env_parallel -S server myfunc ::: work
env_parallel --env myfunc myfunc ::: work env_parallel --env myfunc myfunc ::: work
env_parallel --env myfunc -S server 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 echo '$myvar' ::: work
env_parallel -S server echo '$myvar' ::: work env_parallel -S server echo '$myvar' ::: work
env_parallel --env myvar echo '$myvar' ::: work env_parallel --env myvar echo '$myvar' ::: work
env_parallel --env myvar -S server 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 echo '$myarray[{}]' ::: 1 2 3 4
env_parallel -k -S server 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 echo '$myarray[{}]' ::: 1 2 3 4
@ -247,37 +288,50 @@ par_ksh_man() {
. `which env_parallel.ksh`; . `which env_parallel.ksh`;
alias myecho='echo aliases with \= \& \"' alias myecho='echo aliases with \= \& \" \!'" \'"
myecho work
env_parallel myecho ::: work env_parallel myecho ::: work
env_parallel -S server myecho ::: work env_parallel -S server myecho ::: work
env_parallel --env myecho myecho ::: work env_parallel --env myecho myecho ::: work
env_parallel --env myecho -S server myecho ::: work env_parallel --env myecho -S server myecho ::: work
alias multiline='echo multiline alias multiline='echo multiline
echo aliases with \= \& \"' echo aliases with \= \& \" \!'" \'"
multiline work
env_parallel multiline ::: work env_parallel multiline ::: work
env_parallel -S server multiline ::: work env_parallel -S server multiline ::: work
env_parallel --env multiline multiline ::: work env_parallel --env multiline multiline ::: work
env_parallel --env multiline -S server multiline ::: work env_parallel --env multiline -S server multiline ::: work
alias multiline='dummy' alias multiline='dummy'
myfunc() { echo functions 'with = & "' $*; } myfunc() { echo functions 'with = & " !'" '" $*; }
myfunc work
env_parallel myfunc ::: work env_parallel myfunc ::: work
env_parallel -S server myfunc ::: work env_parallel -S server myfunc ::: work
env_parallel --env myfunc myfunc ::: work env_parallel --env myfunc myfunc ::: work
env_parallel --env myfunc -S server myfunc ::: work env_parallel --env myfunc -S server myfunc ::: work
myvar='variables with = & "' myvar='variables with = & " !'" '"
env_parallel echo '$myvar' ::: work echo "$myvar" work
env_parallel -S server echo '$myvar' ::: work env_parallel echo '"$myvar"' ::: work
env_parallel --env myvar echo '$myvar' ::: work env_parallel -S server echo '"$myvar"' ::: work
env_parallel --env myvar -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 multivar='multiline
env_parallel -k -S server echo '${myarray[{}]}' ::: 0 1 2 variables with = & " !'" '"
env_parallel -k --env myarray echo '${myarray[{}]}' ::: 0 1 2 echo "$multivar" work
env_parallel -k --env myarray -S server echo '${myarray[{}]}' ::: 0 1 2 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 env_parallel ::: true false true false
echo exit value $? should be 2 echo exit value $? should be 2
@ -297,33 +351,41 @@ par_sh_man() {
. `which env_parallel.sh`; . `which env_parallel.sh`;
alias myecho='echo aliases with \= \& \"' alias myecho='echo aliases with \= \& \" \!'" \'"
myecho work
env_parallel myecho ::: work env_parallel myecho ::: work
env_parallel -S server myecho ::: work env_parallel -S server myecho ::: work
env_parallel --env myecho myecho ::: work env_parallel --env myecho myecho ::: work
env_parallel --env myecho -S server myecho ::: work env_parallel --env myecho -S server myecho ::: work
alias multiline='echo multiline alias multiline='echo multiline
echo aliases with \= \& \"' echo aliases with \= \& \" \!'" \'"
multiline work
env_parallel multiline ::: work env_parallel multiline ::: work
env_parallel -S server multiline ::: work env_parallel -S server multiline ::: work
env_parallel --env multiline multiline ::: work env_parallel --env multiline multiline ::: work
env_parallel --env multiline -S server multiline ::: work env_parallel --env multiline -S server multiline ::: work
alias multiline="dummy" alias multiline="dummy"
myvar='variables with = & "' # Functions not supported
env_parallel echo '$myvar' ::: work
env_parallel -S server echo '$myvar' ::: work myvar='variables with = & " !'" '"
env_parallel --env myvar echo '$myvar' ::: work echo "$myvar" work
env_parallel --env myvar -S server 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 multivar='multiline
variables with = & "' variables with = & " !'" '"
echo "$multivar" work
env_parallel echo '"$multivar"' ::: work env_parallel echo '"$multivar"' ::: work
env_parallel -S server echo '"$multivar"' ::: work env_parallel -S server echo '"$multivar"' ::: work
env_parallel --env multivar echo '"$multivar"' ::: work env_parallel --env multivar echo '"$multivar"' ::: work
env_parallel --env multivar -S server echo '"$multivar"' ::: work env_parallel --env multivar -S server echo '"$multivar"' ::: work
# Arrays are not supported by sh
env_parallel ::: true false true false env_parallel ::: true false true false
echo exit value $? should be 2 echo exit value $? should be 2
@ -349,18 +411,21 @@ par_tcsh_man() {
echo Functions not supported echo Functions not supported
# TODO This does not work
# set myvar='variables with = & "'" '"
set myvar='variables with \= \& \"' set myvar='variables with \= \& \"'
env_parallel echo '$myvar' ::: work env_parallel echo '$myvar' ::: work
env_parallel -S server echo '$myvar' ::: work env_parallel -S server echo '$myvar' ::: work
env_parallel --env myvar echo '$myvar' ::: work env_parallel --env myvar echo '$myvar' ::: work
env_parallel --env myvar -S server echo '$myvar' ::: work env_parallel --env myvar -S server echo '$myvar' ::: work
# TODO this is not fixed # Space is not supported in arrays
set myarray=(arrays with\ \=\ \&\ \" work, too)
env_parallel -k echo \$'{myarray[{}]}' ::: 1 2 3 set myarray=(arrays with\=\&\""'" work, too)
env_parallel -k -S server echo \$'{myarray[{}]}' ::: 1 2 3 env_parallel -k echo \$'{myarray[{}]}' ::: 1 2 3 4
env_parallel -k --env myarray echo \$'{myarray[{}]}' ::: 1 2 3 env_parallel -k -S server echo \$'{myarray[{}]}' ::: 1 2 3 4
env_parallel -k --env myarray -S server echo \$'{myarray[{}]}' ::: 1 2 3 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 env_parallel ::: true false true false
echo exit value $status should be 2 echo exit value $status should be 2
@ -374,41 +439,59 @@ _EOF
par_zsh_man() { par_zsh_man() {
echo '### zsh' echo '### zsh'
# eval is needed make aliases work
myscript=$(cat <<'_EOF' myscript=$(cat <<'_EOF'
echo "### From man env_parallel" echo "### From man env_parallel"
. `which env_parallel.zsh`; . `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 myecho ::: work
env_parallel -S server myecho ::: work env_parallel -S server myecho ::: work
env_parallel --env myecho myecho ::: work env_parallel --env myecho myecho ::: work
env_parallel --env myecho -S server myecho ::: work env_parallel --env myecho -S server myecho ::: work
alias multiline='echo multiline 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 multiline ::: work
env_parallel -S server multiline ::: work env_parallel -S server multiline ::: work
env_parallel --env multiline multiline ::: work env_parallel --env multiline multiline ::: work
env_parallel --env multiline -S server 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 myfunc ::: work
env_parallel -S server myfunc ::: work env_parallel -S server myfunc ::: work
env_parallel --env myfunc myfunc ::: work env_parallel --env myfunc myfunc ::: work
env_parallel --env myfunc -S server myfunc ::: work env_parallel --env myfunc -S server myfunc ::: work
myvar='variables with = & "' myvar='variables with = & " !'" '"
env_parallel echo '$myvar' ::: work echo "$myvar" work
env_parallel -S server echo '$myvar' ::: work env_parallel echo '"$myvar"' ::: work
env_parallel --env myvar echo '$myvar' ::: work env_parallel -S server echo '"$myvar"' ::: work
env_parallel --env myvar -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 multivar='multiline
env_parallel -k -S server echo '${myarray[{}]}' ::: 1 2 3 4 variables with = & " !'" '"
env_parallel -k --env myarray echo '${myarray[{}]}' ::: 1 2 3 4 echo "$multivar" work
env_parallel -k --env myarray -S server echo '${myarray[{}]}' ::: 1 2 3 4 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 env_parallel ::: true false true false
echo exit value $? should be 2 echo exit value $? should be 2

View file

@ -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:/'

View file

@ -2,6 +2,8 @@
rm -f ~/.parallel/will-cite rm -f ~/.parallel/will-cite
resize=`resize`
# Disabled 2015-06-01 # Disabled 2015-06-01
# #
# echo '### Test stdin goes to first command only ("-" as argument)' # 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 stdout parallel --citation < /dev/null
touch ~/.parallel/will-cite touch ~/.parallel/will-cite
# Clear screen
eval `resize`
seq $LINES | parallel -N0 echo > /dev/tty
reset reset

View file

@ -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 sleep 0.1; echo opt-p 3 ?...y
par_interactive spawn /tmp/parallel-script-for-expect par_interactive spawn /tmp/parallel-script-for-expect
par_k ### Test -k par_k ### Test -k
par_k parallel: Warning: Only enough file handles to run 9 jobs in parallel. par_k parallel: Warning: Only enough file handles to run 8 jobs in parallel.
par_k parallel: Warning: Running 'parallel -j0 -N 9 --pipe parallel -j0' or 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: raising 'ulimit -n' or 'nofile' in /etc/security/limits.conf
par_k parallel: Warning: or /proc/sys/fs/file-max may help. par_k parallel: Warning: or /proc/sys/fs/file-max may help.
par_k begin par_k begin

View file

@ -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_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 ### zsh
par_zsh_man ### From man env_parallel 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 multiline
par_zsh_man aliases with = & " work par_zsh_man aliases with = & " ! ' work
par_zsh_man multiline par_zsh_man multiline
par_zsh_man aliases with = & " work par_zsh_man aliases with = & " ! ' work
par_zsh_man multiline par_zsh_man multiline
par_zsh_man aliases with = & " work par_zsh_man aliases with = & " ! ' work
par_zsh_man multiline par_zsh_man multiline
par_zsh_man aliases with = & " work par_zsh_man aliases with = & " ! ' work
par_zsh_man functions with = & " work par_zsh_man multiline
par_zsh_man functions with = & " work 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 functions with = & " ! ' work
par_zsh_man variables with = & " work par_zsh_man functions with = & " ! ' work
par_zsh_man variables 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 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 arrays
par_zsh_man with = & " par_zsh_man with = & " ! '
par_zsh_man work, par_zsh_man work,
par_zsh_man too par_zsh_man too
par_zsh_man arrays par_zsh_man arrays
par_zsh_man with = & " par_zsh_man with = & " ! '
par_zsh_man work, par_zsh_man work,
par_zsh_man too par_zsh_man too
par_zsh_man arrays par_zsh_man arrays
par_zsh_man with = & " par_zsh_man with = & " ! '
par_zsh_man work, par_zsh_man work,
par_zsh_man too par_zsh_man too
par_zsh_man arrays par_zsh_man arrays
par_zsh_man with = & " par_zsh_man with = & " ! '
par_zsh_man work, par_zsh_man work,
par_zsh_man too par_zsh_man too
par_zsh_man exit value 2 should be 2 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
par_zsh_environment_too_big OK_bigfunc_quote_remote par_zsh_environment_too_big OK_bigfunc_quote_remote
par_zsh_environment_too_big Rest should fail 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: 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: 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: env_parallel --record-env
par_zsh_environment_too_big env_parallel: Error: And the use '--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 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: 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: 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: env_parallel --record-env
par_zsh_environment_too_big env_parallel: Error: And the use '--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 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: 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: 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: env_parallel --record-env
par_zsh_environment_too_big env_parallel: Error: And the use '--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 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: 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: 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: env_parallel --record-env
par_zsh_environment_too_big env_parallel: Error: And the use '--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 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: 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: 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: env_parallel --record-env
par_zsh_environment_too_big env_parallel: Error: And the use '--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 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: 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: 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: env_parallel --record-env
par_zsh_environment_too_big env_parallel: Error: And the use '--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 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: 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: 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: env_parallel --record-env
par_zsh_environment_too_big env_parallel: Error: And the use '--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 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: 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: 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: 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 aliases with = & " work par_tcsh_man aliases with = & " work
par_tcsh_man Functions not supported 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 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 #: Command not found.
par_tcsh_man arrays par_tcsh_man arrays
par_tcsh_man with par_tcsh_man with=&"'
par_tcsh_man = par_tcsh_man work,
par_tcsh_man too
par_tcsh_man arrays par_tcsh_man arrays
par_tcsh_man with par_tcsh_man with=&"'
par_tcsh_man = par_tcsh_man work,
par_tcsh_man too
par_tcsh_man arrays par_tcsh_man arrays
par_tcsh_man with par_tcsh_man with=&"'
par_tcsh_man = par_tcsh_man work,
par_tcsh_man too
par_tcsh_man arrays par_tcsh_man arrays
par_tcsh_man with par_tcsh_man with=&"'
par_tcsh_man = par_tcsh_man work,
par_tcsh_man too
par_tcsh_man exit value 2 should be 2 par_tcsh_man exit value 2 should be 2
par_tcsh_man Unknown option: no-such-option par_tcsh_man Unknown option: no-such-option
par_tcsh_man Usage: par_tcsh_man Usage:
@ -354,30 +384,36 @@ par_sh_parset 2
par_sh_parset 3 par_sh_parset 3
par_sh_man ### sh par_sh_man ### sh
par_sh_man ### From man env_parallel 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 multiline
par_sh_man aliases with = & " work par_sh_man aliases with = & " ! ' work
par_sh_man multiline par_sh_man multiline
par_sh_man aliases with = & " work par_sh_man aliases with = & " ! ' work
par_sh_man multiline par_sh_man multiline
par_sh_man aliases with = & " work par_sh_man aliases with = & " ! ' work
par_sh_man multiline par_sh_man multiline
par_sh_man aliases 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 multiline 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 multiline
par_sh_man variables with = & " work par_sh_man variables with = & " ! ' work
par_sh_man multiline par_sh_man multiline
par_sh_man variables with = & " work par_sh_man variables with = & " ! ' work
par_sh_man multiline 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 exit value 2 should be 2
par_sh_man Unknown option: no-such-option par_sh_man Unknown option: no-such-option
par_sh_man exit value 255 should be 255 par_sh_man exit value 255 should be 255
@ -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
par_sh_environment_too_big OK_bigvar_quote_remote par_sh_environment_too_big OK_bigvar_quote_remote
par_sh_environment_too_big Rest should fail 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: 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: 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: env_parallel --record-env
par_sh_environment_too_big env_parallel: Error: And the use '--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 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: 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: 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: env_parallel --record-env
par_sh_environment_too_big env_parallel: Error: And the use '--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 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: 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: 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: env_parallel --record-env
par_sh_environment_too_big env_parallel: Error: And the use '--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 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: 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: 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: 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_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 ### ksh
par_ksh_man ### From man env_parallel 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: 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: 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 env_parallel: Warning: See BUGS in "man env_parallel".
par_ksh_man multiline 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: 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: 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 env_parallel: Warning: See BUGS in "man env_parallel".
par_ksh_man multiline 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: 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: 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 env_parallel: Warning: See BUGS in "man env_parallel".
par_ksh_man multiline 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: 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: 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 env_parallel: Warning: See BUGS in "man env_parallel".
par_ksh_man multiline par_ksh_man multiline
par_ksh_man aliases 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 functions with = & " ! ' work
par_ksh_man functions with = & " work par_ksh_man functions with = & " ! ' work
par_ksh_man variables 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 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 arrays
par_ksh_man with = & " par_ksh_man with = & " ! '
par_ksh_man work, par_ksh_man work,
par_ksh_man too
par_ksh_man arrays par_ksh_man arrays
par_ksh_man with = & " par_ksh_man with = & " ! '
par_ksh_man work, par_ksh_man work,
par_ksh_man too
par_ksh_man arrays par_ksh_man arrays
par_ksh_man with = & " par_ksh_man with = & " ! '
par_ksh_man work, par_ksh_man work,
par_ksh_man too
par_ksh_man arrays par_ksh_man arrays
par_ksh_man with = & " par_ksh_man with = & " ! '
par_ksh_man work, par_ksh_man work,
par_ksh_man too
par_ksh_man exit value 2 should be 2 par_ksh_man exit value 2 should be 2
par_ksh_man Unknown option: no-such-option par_ksh_man Unknown option: no-such-option
par_ksh_man exit value 255 should be 255 par_ksh_man exit value 255 should be 255
@ -676,32 +732,42 @@ par_fish_underscore OK if ^^^^^^^^^^^^^^^^^ no myfunc
par_fish_parset Not implemented par_fish_parset Not implemented
par_fish_man ### fish par_fish_man ### fish
par_fish_man ### From man env_parallel 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 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 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 functions with = & " ! ' work
par_fish_man variables = & " work par_fish_man functions with = & " ! ' work
par_fish_man variables = & " work par_fish_man functions with = & " ! ' work
par_fish_man variables = & " work par_fish_man variables with = & " ! ' work
par_fish_man variables = & " 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 arrays
par_fish_man with = & " par_fish_man with = & " ! '
par_fish_man work, par_fish_man work,
par_fish_man too par_fish_man too
par_fish_man arrays par_fish_man arrays
par_fish_man with = & " par_fish_man with = & " ! '
par_fish_man work, par_fish_man work,
par_fish_man too par_fish_man too
par_fish_man arrays par_fish_man arrays
par_fish_man with = & " par_fish_man with = & " ! '
par_fish_man work, par_fish_man work,
par_fish_man too par_fish_man too
par_fish_man arrays par_fish_man arrays
par_fish_man with = & " par_fish_man with = & " ! '
par_fish_man work, par_fish_man work,
par_fish_man too par_fish_man too
par_fish_man exit value 2 should be 2 par_fish_man exit value 2 should be 2
@ -791,30 +857,36 @@ par_dash_parset 2
par_dash_parset 3 par_dash_parset 3
par_dash_man ### dash par_dash_man ### dash
par_dash_man ### From man env_parallel 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 multiline
par_dash_man aliases with = & " work par_dash_man aliases with = & " ! ' work
par_dash_man multiline par_dash_man multiline
par_dash_man aliases with = & " work par_dash_man aliases with = & " ! ' work
par_dash_man multiline par_dash_man multiline
par_dash_man aliases with = & " work par_dash_man aliases with = & " ! ' work
par_dash_man multiline par_dash_man multiline
par_dash_man aliases 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 multiline 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 multiline
par_dash_man variables with = & " work par_dash_man variables with = & " ! ' work
par_dash_man multiline par_dash_man multiline
par_dash_man variables with = & " work par_dash_man variables with = & " ! ' work
par_dash_man multiline 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 exit value 2 should be 2
par_dash_man Unknown option: no-such-option par_dash_man Unknown option: no-such-option
par_dash_man exit value 255 should be 255 par_dash_man exit value 255 should be 255
@ -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
par_dash_environment_too_big OK_bigvar_quote_remote par_dash_environment_too_big OK_bigvar_quote_remote
par_dash_environment_too_big Rest should fail 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: 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: 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: env_parallel --record-env
par_dash_environment_too_big env_parallel: Error: And the use '--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 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: 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: 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: env_parallel --record-env
par_dash_environment_too_big env_parallel: Error: And the use '--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 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: 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: 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: env_parallel --record-env
par_dash_environment_too_big env_parallel: Error: And the use '--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 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: 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: 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: 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 ;login: The USENIX Magazine, February 2011:42-47.
par_csh_man O. Tange (2011): GNU Parallel - The Command-Line Power Tool, par_csh_man O. Tange (2011): GNU Parallel - The Command-Line Power Tool,
par_csh_man ### From man env_parallel 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 --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 --nonall Run the given command with no arguments on all sshlogins
par_csh_man --onall Run the given command with argument 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 -X Multiple arguments with context replace
par_csh_man -j n Run n jobs in parallel par_csh_man -j n Run n jobs in parallel
par_csh_man -k Keep same order 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 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 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 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]] (::: arguments|:::: argfile(s))...
par_csh_man parallel [options] [command [arguments]] < list_of_arguments par_csh_man parallel [options] [command [arguments]] < list_of_arguments
par_csh_man scientific publication, please cite: 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 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 {3} {3.} {3/} {3/.} {=3 perl code =} Positional replacement strings
par_csh_man {} {.} {/} {/.} {#} {%} {= perl code =} Replacement strings par_csh_man {} {.} {/} {/.} {#} {%} {= perl code =} Replacement strings
par_csh_funky 3 arg alias_works 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_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 ### bash
par_bash_man ### From man env_parallel 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: 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: 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 env_parallel: Warning: See BUGS in 'man env_parallel'.
par_bash_man multiline 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 but only when followed by a newline
par_bash_man env_parallel: Warning: Alias 'multiline' contains 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: 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 env_parallel: Warning: See BUGS in 'man env_parallel'.
par_bash_man multiline 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 but only when followed by a newline
par_bash_man env_parallel: Warning: Alias 'multiline' contains 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: 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 env_parallel: Warning: See BUGS in 'man env_parallel'.
par_bash_man multiline 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 but only when followed by a newline
par_bash_man env_parallel: Warning: Alias 'multiline' contains 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: 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 env_parallel: Warning: See BUGS in 'man env_parallel'.
par_bash_man multiline 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 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 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 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 variables with = & " ! ' work
par_bash_man variables with = & " ! ' work
par_bash_man variables with = & " ! ' work
par_bash_man multiline par_bash_man multiline
par_bash_man variables with = & " work par_bash_man variables with = & " ! ' work
par_bash_man multiline par_bash_man multiline
par_bash_man variables with = & " work par_bash_man variables with = & " ! ' work
par_bash_man multiline par_bash_man multiline
par_bash_man variables with = & " work par_bash_man variables with = & " ! ' work
par_bash_man multiline 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 arrays
par_bash_man with = & " par_bash_man with = & " ! '
par_bash_man work, par_bash_man work,
par_bash_man too par_bash_man too
par_bash_man arrays par_bash_man arrays
par_bash_man with = & " par_bash_man with = & " ! '
par_bash_man work, par_bash_man work,
par_bash_man too par_bash_man too
par_bash_man arrays par_bash_man arrays
par_bash_man with = & " par_bash_man with = & " ! '
par_bash_man work, par_bash_man work,
par_bash_man too par_bash_man too
par_bash_man arrays par_bash_man arrays
par_bash_man with = & " par_bash_man with = & " ! '
par_bash_man work, par_bash_man work,
par_bash_man too par_bash_man too
par_bash_man exit value 2 should be 2 par_bash_man exit value 2 should be 2
@ -1238,30 +1318,36 @@ par_ash_parset 2
par_ash_parset 3 par_ash_parset 3
par_ash_man ### ash par_ash_man ### ash
par_ash_man ### From man env_parallel 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 multiline
par_ash_man aliases with = & " work par_ash_man aliases with = & " ! ' work
par_ash_man multiline par_ash_man multiline
par_ash_man aliases with = & " work par_ash_man aliases with = & " ! ' work
par_ash_man multiline par_ash_man multiline
par_ash_man aliases with = & " work par_ash_man aliases with = & " ! ' work
par_ash_man multiline par_ash_man multiline
par_ash_man aliases 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 multiline 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 multiline
par_ash_man variables with = & " work par_ash_man variables with = & " ! ' work
par_ash_man multiline par_ash_man multiline
par_ash_man variables with = & " work par_ash_man variables with = & " ! ' work
par_ash_man multiline 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 exit value 2 should be 2
par_ash_man Unknown option: no-such-option par_ash_man Unknown option: no-such-option
par_ash_man exit value 255 should be 255 par_ash_man exit value 255 should be 255
@ -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
par_ash_environment_too_big OK_bigvar_quote_remote par_ash_environment_too_big OK_bigvar_quote_remote
par_ash_environment_too_big Rest should fail 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: 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: 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: env_parallel --record-env
par_ash_environment_too_big env_parallel: Error: And the use '--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 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: 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: 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: env_parallel --record-env
par_ash_environment_too_big env_parallel: Error: And the use '--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 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: 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: 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: env_parallel --record-env
par_ash_environment_too_big env_parallel: Error: And the use '--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 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: 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: 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: env_parallel --record-env

View file

@ -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