parallel: Fixed bug #56578: --lb --tag misses some lines.

parallel: Experimental (buggy) --bin.
This commit is contained in:
Ole Tange 2019-07-14 16:48:57 +02:00
parent 088b43b5b0
commit c36cb46a23
23 changed files with 471 additions and 325 deletions

4
README
View file

@ -55,6 +55,8 @@ document.
Full installation of GNU Parallel is as simple as: Full installation of GNU Parallel is as simple as:
wget https://ftpmirror.gnu.org/parallel/parallel-20190622.tar.bz2 wget https://ftpmirror.gnu.org/parallel/parallel-20190622.tar.bz2
wget https://ftpmirror.gnu.org/parallel/parallel-20190622.tar.bz2.sig
gpg parallel-20190622.tar.bz2.sig
bzip2 -dc parallel-20190622.tar.bz2 | tar xvf - bzip2 -dc parallel-20190622.tar.bz2 | tar xvf -
cd parallel-20190622 cd parallel-20190622
./configure && make && sudo make install ./configure && make && sudo make install
@ -66,6 +68,8 @@ If you are not root you can add ~/bin to your path and install in
~/bin and ~/share: ~/bin and ~/share:
wget https://ftpmirror.gnu.org/parallel/parallel-20190622.tar.bz2 wget https://ftpmirror.gnu.org/parallel/parallel-20190622.tar.bz2
wget https://ftpmirror.gnu.org/parallel/parallel-20190622.tar.bz2.sig
gpg parallel-20190622.tar.bz2.sig
bzip2 -dc parallel-20190622.tar.bz2 | tar xvf - bzip2 -dc parallel-20190622.tar.bz2 | tar xvf -
cd parallel-20190622 cd parallel-20190622
./configure --prefix=$HOME && make && make install ./configure --prefix=$HOME && make && make install

View file

@ -206,7 +206,7 @@ from:tange@gnu.org
to:parallel@gnu.org, bug-parallel@gnu.org to:parallel@gnu.org, bug-parallel@gnu.org
stable-bcc: Jesse Alama <jessealama@fastmail.fm> stable-bcc: Jesse Alama <jessealama@fastmail.fm>
Subject: GNU Parallel 20190722 ('') released <<[stable]>> Subject: GNU Parallel 20190722 ('Ryugu') released <<[stable]>>
GNU Parallel 20190722 ('') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/ GNU Parallel 20190722 ('') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/
@ -230,6 +230,8 @@ New in this release:
* Speedup of startup by 40%: Find the parent shell differerently on GNU/Linux, cache information about the CPU and which setpgrp method to use to make GNU Parallel start 40% faster. * Speedup of startup by 40%: Find the parent shell differerently on GNU/Linux, cache information about the CPU and which setpgrp method to use to make GNU Parallel start 40% faster.
https://zalinux.ru/?p=2623
https://techieroop.com/how-to-run-multiple-bash-scripts-in-parallel/ https://techieroop.com/how-to-run-multiple-bash-scripts-in-parallel/
https://blogs.oracle.com/solaris/announcing-oracle-solaris-114-sru10 https://blogs.oracle.com/solaris/announcing-oracle-solaris-114-sru10

View file

@ -7,8 +7,7 @@
# after which 'env_parallel' works # after which 'env_parallel' works
# #
# #
# Copyright (C) 2016-2019 # Copyright (C) 2016-2019 Ole Tange and Free Software Foundation, Inc.
# Ole Tange and Free Software Foundation, Inc.
# #
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
@ -215,9 +214,11 @@ env_parallel() {
# Grep regexp for vars given by --env # Grep regexp for vars given by --env
_grep_REGEXP="`_make_grep_REGEXP \"$@\"`" _grep_REGEXP="`_make_grep_REGEXP \"$@\"`"
unset _make_grep_REGEXP
# Deal with --env _ # Deal with --env _
_ignore_UNDERSCORE="`_get_ignored_VARS \"$@\"`" _ignore_UNDERSCORE="`_get_ignored_VARS \"$@\"`"
unset _get_ignored_VARS
# --record-env # --record-env
if perl -e 'exit grep { /^--record-env$/ } @ARGV' -- "$@"; then if perl -e 'exit grep { /^--record-env$/ } @ARGV' -- "$@"; then
@ -298,17 +299,22 @@ env_parallel() {
$_list_variable_VALUES; $_list_variable_VALUES;
`" `"
export PARALLEL_ENV export PARALLEL_ENV
unset _list_alias_BODIES unset _list_alias_BODIES _list_variable_VALUES _list_function_BODIES
unset _list_variable_VALUES unset _bodies_of_ALIASES _bodies_of_VARIABLES _bodies_of_FUNCTIONS
unset _list_function_BODIES unset _names_of_ALIASES _names_of_VARIABLES _names_of_FUNCTIONS
unset _grep_REGEXP unset _ignore_HARDCODED _ignore_READONLY _ignore_UNDERSCORE
unset _ignore_UNDERSCORE unset _remove_bad_NAMES _grep_REGEXP
unset _prefix_PARALLEL_ENV
# Test if environment is too big # Test if environment is too big
if `_which_PAR true` >/dev/null 2>/dev/null ; then if `_which_PAR true` >/dev/null 2>/dev/null ; then
parallel "$@"; parallel "$@"
_parallel_exit_CODE=$? _parallel_exit_CODE=$?
unset PARALLEL_ENV; # Clean up variables/functions
return $_parallel_exit_CODE unset PARALLEL_ENV
unset _which_PAR _which_TRUE
unset _warning_PAR _error_PAR
# Unset _parallel_exit_CODE before return
eval "unset _parallel_exit_CODE; return $_parallel_exit_CODE"
else else
unset PARALLEL_ENV; unset PARALLEL_ENV;
_error_PAR "Your environment is too big." _error_PAR "Your environment is too big."
@ -404,5 +410,7 @@ _parset_main() {
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "'
) )" ) )"
fi fi
return `cat "$_exit_FILE"; rm "$_exit_FILE"` unset _parset_NAME _parset_PARALLEL_PRG _parallel_exit_CODE
# Unset _exit_FILE before return
eval "unset _exit_FILE; return \`cat $_exit_FILE; rm $_exit_FILE\`"
} }

View file

@ -7,8 +7,7 @@
# after which 'env_parallel' works # after which 'env_parallel' works
# #
# #
# Copyright (C) 2016-2019 # Copyright (C) 2016-2019 Ole Tange and Free Software Foundation, Inc.
# Ole Tange and Free Software Foundation, Inc.
# #
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
@ -207,9 +206,11 @@ env_parallel() {
# Grep regexp for vars given by --env # Grep regexp for vars given by --env
_grep_REGEXP="`_make_grep_REGEXP \"$@\"`" _grep_REGEXP="`_make_grep_REGEXP \"$@\"`"
unset _make_grep_REGEXP
# Deal with --env _ # Deal with --env _
_ignore_UNDERSCORE="`_get_ignored_VARS \"$@\"`" _ignore_UNDERSCORE="`_get_ignored_VARS \"$@\"`"
unset _get_ignored_VARS
# --record-env # --record-env
# Bash is broken in version 3.2.25 and 4.2.39 # Bash is broken in version 3.2.25 and 4.2.39
@ -251,6 +252,8 @@ env_parallel() {
export PARALLEL_IGNORED_NAMES export PARALLEL_IGNORED_NAMES
return 0 return 0
fi fi
# Bash is broken in version 3.2.25 and 4.2.39
# The crazy '[ "`...`" == 0 ]' is needed for the same reason
if [ "`perl -e 'exit grep { /^--end.?session$/ } @ARGV' -- "$@"; echo $?`" == 0 ] ; then if [ "`perl -e 'exit grep { /^--end.?session$/ } @ARGV' -- "$@"; echo $?`" == 0 ] ; then
true skip true skip
else else
@ -298,17 +301,22 @@ env_parallel() {
$_list_variable_VALUES; $_list_variable_VALUES;
`" `"
export PARALLEL_ENV export PARALLEL_ENV
unset _list_alias_BODIES unset _list_alias_BODIES _list_variable_VALUES _list_function_BODIES
unset _list_variable_VALUES unset _bodies_of_ALIASES _bodies_of_VARIABLES _bodies_of_FUNCTIONS
unset _list_function_BODIES unset _names_of_ALIASES _names_of_VARIABLES _names_of_FUNCTIONS
unset _grep_REGEXP unset _ignore_HARDCODED _ignore_READONLY _ignore_UNDERSCORE
unset _ignore_UNDERSCORE unset _remove_bad_NAMES _grep_REGEXP
unset _prefix_PARALLEL_ENV
# Test if environment is too big # Test if environment is too big
if [ "`_which_PAR true`" == "$_which_TRUE" ] ; then if [ "`_which_PAR true`" == "$_which_TRUE" ] ; then
parallel "$@"; parallel "$@"
_parallel_exit_CODE=$? _parallel_exit_CODE=$?
unset PARALLEL_ENV; # Clean up variables/functions
return $_parallel_exit_CODE unset PARALLEL_ENV
unset _which_PAR _which_TRUE
unset _warning_PAR _error_PAR
# Unset _parallel_exit_CODE before return
eval "unset _parallel_exit_CODE; return $_parallel_exit_CODE"
else else
unset PARALLEL_ENV; unset PARALLEL_ENV;
_error_PAR "Your environment is too big." _error_PAR "Your environment is too big."
@ -401,8 +409,10 @@ _parset_main() {
eval "$_parset_NAME=( $( eval "$_parset_NAME=( $(
# Compute results into files. Save exit value # Compute results into files. Save exit value
($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") | ($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "'
) )" ) )"
fi fi
return `cat "$_exit_FILE"; rm "$_exit_FILE"` unset _parset_NAME _parset_PARALLEL_PRG _parallel_exit_CODE
# Unset _exit_FILE before return
eval "unset _exit_FILE; return \`cat $_exit_FILE; rm $_exit_FILE\`"
} }

View file

@ -7,8 +7,7 @@
# after which 'env_parallel' works # after which 'env_parallel' works
# #
# #
# Copyright (C) 2016-2019 # Copyright (C) 2016-2019 Ole Tange and Free Software Foundation, Inc.
# Ole Tange and Free Software Foundation, Inc.
# #
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by

View file

@ -7,8 +7,7 @@
# after which 'env_parallel' works # after which 'env_parallel' works
# #
# #
# Copyright (C) 2016-2019 # Copyright (C) 2016-2019 Ole Tange and Free Software Foundation, Inc.
# Ole Tange and Free Software Foundation, Inc.
# #
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
@ -215,9 +214,11 @@ env_parallel() {
# Grep regexp for vars given by --env # Grep regexp for vars given by --env
_grep_REGEXP="`_make_grep_REGEXP \"$@\"`" _grep_REGEXP="`_make_grep_REGEXP \"$@\"`"
unset _make_grep_REGEXP
# Deal with --env _ # Deal with --env _
_ignore_UNDERSCORE="`_get_ignored_VARS \"$@\"`" _ignore_UNDERSCORE="`_get_ignored_VARS \"$@\"`"
unset _get_ignored_VARS
# --record-env # --record-env
if perl -e 'exit grep { /^--record-env$/ } @ARGV' -- "$@"; then if perl -e 'exit grep { /^--record-env$/ } @ARGV' -- "$@"; then
@ -298,17 +299,22 @@ env_parallel() {
$_list_variable_VALUES; $_list_variable_VALUES;
`" `"
export PARALLEL_ENV export PARALLEL_ENV
unset _list_alias_BODIES unset _list_alias_BODIES _list_variable_VALUES _list_function_BODIES
unset _list_variable_VALUES unset _bodies_of_ALIASES _bodies_of_VARIABLES _bodies_of_FUNCTIONS
unset _list_function_BODIES unset _names_of_ALIASES _names_of_VARIABLES _names_of_FUNCTIONS
unset _grep_REGEXP unset _ignore_HARDCODED _ignore_READONLY _ignore_UNDERSCORE
unset _ignore_UNDERSCORE unset _remove_bad_NAMES _grep_REGEXP
unset _prefix_PARALLEL_ENV
# Test if environment is too big # Test if environment is too big
if `_which_PAR true` >/dev/null 2>/dev/null ; then if `_which_PAR true` >/dev/null 2>/dev/null ; then
parallel "$@"; parallel "$@"
_parallel_exit_CODE=$? _parallel_exit_CODE=$?
unset PARALLEL_ENV; # Clean up variables/functions
return $_parallel_exit_CODE unset PARALLEL_ENV
unset _which_PAR _which_TRUE
unset _warning_PAR _error_PAR
# Unset _parallel_exit_CODE before return
eval "unset _parallel_exit_CODE; return $_parallel_exit_CODE"
else else
unset PARALLEL_ENV; unset PARALLEL_ENV;
_error_PAR "Your environment is too big." _error_PAR "Your environment is too big."
@ -404,5 +410,7 @@ _parset_main() {
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "'
) )" ) )"
fi fi
return `cat "$_exit_FILE"; rm "$_exit_FILE"` unset _parset_NAME _parset_PARALLEL_PRG _parallel_exit_CODE
# Unset _exit_FILE before return
eval "unset _exit_FILE; return \`cat $_exit_FILE; rm $_exit_FILE\`"
} }

View file

@ -7,8 +7,7 @@
# after which 'env_parallel' works # after which 'env_parallel' works
# #
# #
# Copyright (C) 2016-2019 # Copyright (C) 2016-2019 Ole Tange and Free Software Foundation, Inc.
# Ole Tange and Free Software Foundation, Inc.
# #
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by

View file

@ -7,8 +7,7 @@
# after which 'env_parallel' works # after which 'env_parallel' works
# #
# #
# Copyright (C) 2016-2019 # Copyright (C) 2016-2019 Ole Tange and Free Software Foundation, Inc.
# Ole Tange and Free Software Foundation, Inc.
# #
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
@ -198,9 +197,11 @@ env_parallel() {
# Grep regexp for vars given by --env # Grep regexp for vars given by --env
_grep_REGEXP="`_make_grep_REGEXP \"$@\"`" _grep_REGEXP="`_make_grep_REGEXP \"$@\"`"
unset _make_grep_REGEXP
# Deal with --env _ # Deal with --env _
_ignore_UNDERSCORE="`_get_ignored_VARS \"$@\"`" _ignore_UNDERSCORE="`_get_ignored_VARS \"$@\"`"
unset _get_ignored_VARS
# --record-env # --record-env
if perl -e 'exit grep { /^--record-env$/ } @ARGV' -- "$@"; then if perl -e 'exit grep { /^--record-env$/ } @ARGV' -- "$@"; then
@ -281,17 +282,22 @@ env_parallel() {
$_list_variable_VALUES; $_list_variable_VALUES;
`" `"
export PARALLEL_ENV export PARALLEL_ENV
unset _list_alias_BODIES unset _list_alias_BODIES _list_variable_VALUES _list_function_BODIES
unset _list_variable_VALUES unset _bodies_of_ALIASES _bodies_of_VARIABLES _bodies_of_FUNCTIONS
unset _list_function_BODIES unset _names_of_ALIASES _names_of_VARIABLES _names_of_FUNCTIONS
unset _grep_REGEXP unset _ignore_HARDCODED _ignore_READONLY _ignore_UNDERSCORE
unset _ignore_UNDERSCORE unset _remove_bad_NAMES _grep_REGEXP
unset _prefix_PARALLEL_ENV
# Test if environment is too big # Test if environment is too big
if `_which_PAR true` >/dev/null 2>/dev/null ; then if `_which_PAR true` >/dev/null 2>/dev/null ; then
parallel "$@"; parallel "$@"
_parallel_exit_CODE=$? _parallel_exit_CODE=$?
unset PARALLEL_ENV; # Clean up variables/functions
return $_parallel_exit_CODE unset PARALLEL_ENV
unset _which_PAR _which_TRUE
unset _warning_PAR _error_PAR
# Unset _parallel_exit_CODE before return
eval "unset _parallel_exit_CODE; return $_parallel_exit_CODE"
else else
unset PARALLEL_ENV; unset PARALLEL_ENV;
_error_PAR "Your environment is too big." _error_PAR "Your environment is too big."
@ -387,5 +393,7 @@ _parset_main() {
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "'
) )" ) )"
fi fi
return `cat "$_exit_FILE"; rm "$_exit_FILE"` unset _parset_NAME _parset_PARALLEL_PRG _parallel_exit_CODE
# Unset _exit_FILE before return
eval "unset _exit_FILE; return \`cat $_exit_FILE; rm $_exit_FILE\`"
} }

View file

@ -7,8 +7,7 @@
# after which 'env_parallel' works # after which 'env_parallel' works
# #
# #
# Copyright (C) 2016-2019 # Copyright (C) 2016-2019 Ole Tange and Free Software Foundation, Inc.
# Ole Tange and Free Software Foundation, Inc.
# #
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
@ -201,9 +200,11 @@ env_parallel() {
# Grep regexp for vars given by --env # Grep regexp for vars given by --env
_grep_REGEXP="`_make_grep_REGEXP \"$@\"`" _grep_REGEXP="`_make_grep_REGEXP \"$@\"`"
unset _make_grep_REGEXP
# Deal with --env _ # Deal with --env _
_ignore_UNDERSCORE="`_get_ignored_VARS \"$@\"`" _ignore_UNDERSCORE="`_get_ignored_VARS \"$@\"`"
unset _get_ignored_VARS
# --record-env # --record-env
if perl -e 'exit grep { /^--record-env$/ } @ARGV' -- "$@"; then if perl -e 'exit grep { /^--record-env$/ } @ARGV' -- "$@"; then
@ -284,17 +285,22 @@ env_parallel() {
$_list_variable_VALUES; $_list_variable_VALUES;
`" `"
export PARALLEL_ENV export PARALLEL_ENV
unset _list_alias_BODIES unset _list_alias_BODIES _list_variable_VALUES _list_function_BODIES
unset _list_variable_VALUES unset _bodies_of_ALIASES _bodies_of_VARIABLES _bodies_of_FUNCTIONS
unset _list_function_BODIES unset _names_of_ALIASES _names_of_VARIABLES _names_of_FUNCTIONS
unset _grep_REGEXP unset _ignore_HARDCODED _ignore_READONLY _ignore_UNDERSCORE
unset _ignore_UNDERSCORE unset _remove_bad_NAMES _grep_REGEXP
unset _prefix_PARALLEL_ENV
# Test if environment is too big # Test if environment is too big
if `_which_PAR true` >/dev/null 2>/dev/null ; then if `_which_PAR true` >/dev/null 2>/dev/null ; then
parallel "$@"; parallel "$@"
_parallel_exit_CODE=$? _parallel_exit_CODE=$?
unset PARALLEL_ENV; # Clean up variables/functions
return $_parallel_exit_CODE unset PARALLEL_ENV
unset _which_PAR _which_TRUE
unset _warning_PAR _error_PAR
# Unset _parallel_exit_CODE before return
eval "unset _parallel_exit_CODE; return $_parallel_exit_CODE"
else else
unset PARALLEL_ENV; unset PARALLEL_ENV;
_error_PAR "Your environment is too big." _error_PAR "Your environment is too big."
@ -390,5 +396,7 @@ _parset_main() {
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "'
) )" ) )"
fi fi
return `cat "$_exit_FILE"; rm "$_exit_FILE"` unset _parset_NAME _parset_PARALLEL_PRG _parallel_exit_CODE
# Unset _exit_FILE before return
eval "unset _exit_FILE; return \`cat $_exit_FILE; rm $_exit_FILE\`"
} }

View file

@ -7,8 +7,7 @@
# after which 'env_parallel' works # after which 'env_parallel' works
# #
# #
# Copyright (C) 2016-2019 # Copyright (C) 2016-2019 Ole Tange and Free Software Foundation, Inc.
# Ole Tange and Free Software Foundation, Inc.
# #
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
@ -114,44 +113,11 @@ env_parallel() {
# Grep regexp for vars given by --env # Grep regexp for vars given by --env
_grep_REGEXP="`_make_grep_REGEXP \"$@\"`" _grep_REGEXP="`_make_grep_REGEXP \"$@\"`"
unset _make_grep_REGEXP
# Deal with --env _ # Deal with --env _
_ignore_UNDERSCORE="`_get_ignored_VARS \"$@\"`" _ignore_UNDERSCORE="`_get_ignored_VARS \"$@\"`"
unset _get_ignored_VARS
# Get the --env variables if set
# --env _ should be ignored
# and convert a b c to (a|b|c)
# If --env not set: Match everything (.*)
_grep_REGEXP="$(
perl -e '
for(@ARGV){
/^_$/ and $next_is_env = 0;
$next_is_env and push @envvar, split/,/, $_;
$next_is_env = /^--env$/;
}
$vars = join "|",map { quotemeta $_ } @envvar;
print $vars ? "($vars)" : "(.*)";
' -- "$@"
)"
# Deal with --env _
_ignore_UNDERSCORE="$(
perl -e '
for(@ARGV){
$next_is_env and push @envvar, split/,/, $_;
$next_is_env=/^--env$/;
}
if(grep { /^_$/ } @envvar) {
if(not open(IN, "<", "$ENV{HOME}/.parallel/ignored_vars")) {
print STDERR "parallel: Error: ",
"Run \"parallel --record-env\" in a clean environment first.\n";
} else {
chomp(@ignored_vars = <IN>);
$vars = join "|",map { quotemeta $_ } "env_parallel", @ignored_vars;
print $vars ? "($vars)" : "(,,nO,,VaRs,,)";
}
}
' -- "$@"
)"
# --record-env # --record-env
if perl -e 'exit grep { /^--record-env$/ } @ARGV' -- "$@"; then if perl -e 'exit grep { /^--record-env$/ } @ARGV' -- "$@"; then
@ -165,7 +131,7 @@ env_parallel() {
fi fi
# Grep alias names # Grep alias names
_alias_NAMES="`_names_of_ALIASES | _remove_bad_NAMES`" _alias_NAMES="`_names_of_ALIASES | _remove_bad_NAMES | xargs echo`"
_list_alias_BODIES="_bodies_of_ALIASES $_alias_NAMES" _list_alias_BODIES="_bodies_of_ALIASES $_alias_NAMES"
if [ "$_alias_NAMES" = "" ] ; then if [ "$_alias_NAMES" = "" ] ; then
# no aliases selected # no aliases selected
@ -174,7 +140,7 @@ env_parallel() {
unset _alias_NAMES unset _alias_NAMES
# Grep function names # Grep function names
_function_NAMES="`_names_of_FUNCTIONS | _remove_bad_NAMES`" _function_NAMES="`_names_of_FUNCTIONS | _remove_bad_NAMES | xargs echo`"
_list_function_BODIES="_bodies_of_FUNCTIONS $_function_NAMES" _list_function_BODIES="_bodies_of_FUNCTIONS $_function_NAMES"
if [ "$_function_NAMES" = "" ] ; then if [ "$_function_NAMES" = "" ] ; then
# no functions selected # no functions selected
@ -183,7 +149,7 @@ env_parallel() {
unset _function_NAMES unset _function_NAMES
# Grep variable names # Grep variable names
_variable_NAMES="`_names_of_VARIABLES | _remove_bad_NAMES`" _variable_NAMES="`_names_of_VARIABLES | _remove_bad_NAMES | xargs echo`"
_list_variable_VALUES="_bodies_of_VARIABLES $_variable_NAMES" _list_variable_VALUES="_bodies_of_VARIABLES $_variable_NAMES"
if [ "$_variable_NAMES" = "" ] ; then if [ "$_variable_NAMES" = "" ] ; then
# no variables selected # no variables selected
@ -197,11 +163,17 @@ env_parallel() {
$_list_function_BODIES $_list_function_BODIES
$_list_variable_VALUES; $_list_variable_VALUES;
`"; `";
unset _list_alias_BODIES unset _list_alias_BODIES _list_variable_VALUES _list_function_BODIES
unset _list_variable_VALUES unset _bodies_of_ALIASES _bodies_of_VARIABLES _bodies_of_FUNCTIONS
unset _list_function_BODIES unset _names_of_ALIASES _names_of_VARIABLES _names_of_FUNCTIONS
`which parallel` "$@"; unset _ignore_HARDCODED _ignore_READONLY _ignore_UNDERSCORE
unset _remove_bad_NAMES _grep_REGEXP
unset _prefix_PARALLEL_ENV
`which parallel` "$@"
_parallel_exit_CODE=$? _parallel_exit_CODE=$?
unset PARALLEL_ENV; unset PARALLEL_ENV;
return $_parallel_exit_CODE unset _which_PAR _which_TRUE
unset _warning_PAR _error_PAR
# Unset _parallel_exit_CODE before return
eval "unset _parallel_exit_CODE; return $_parallel_exit_CODE"
} }

View file

@ -7,8 +7,7 @@
# after which 'env_parallel' works # after which 'env_parallel' works
# #
# #
# Copyright (C) 2016-2019 # Copyright (C) 2016-2019 Ole Tange and Free Software Foundation, Inc.
# Ole Tange and Free Software Foundation, Inc.
# #
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
@ -215,9 +214,11 @@ env_parallel() {
# Grep regexp for vars given by --env # Grep regexp for vars given by --env
_grep_REGEXP="`_make_grep_REGEXP \"$@\"`" _grep_REGEXP="`_make_grep_REGEXP \"$@\"`"
unset _make_grep_REGEXP
# Deal with --env _ # Deal with --env _
_ignore_UNDERSCORE="`_get_ignored_VARS \"$@\"`" _ignore_UNDERSCORE="`_get_ignored_VARS \"$@\"`"
unset _get_ignored_VARS
# --record-env # --record-env
if perl -e 'exit grep { /^--record-env$/ } @ARGV' -- "$@"; then if perl -e 'exit grep { /^--record-env$/ } @ARGV' -- "$@"; then
@ -298,17 +299,22 @@ env_parallel() {
$_list_variable_VALUES; $_list_variable_VALUES;
`" `"
export PARALLEL_ENV export PARALLEL_ENV
unset _list_alias_BODIES unset _list_alias_BODIES _list_variable_VALUES _list_function_BODIES
unset _list_variable_VALUES unset _bodies_of_ALIASES _bodies_of_VARIABLES _bodies_of_FUNCTIONS
unset _list_function_BODIES unset _names_of_ALIASES _names_of_VARIABLES _names_of_FUNCTIONS
unset _grep_REGEXP unset _ignore_HARDCODED _ignore_READONLY _ignore_UNDERSCORE
unset _ignore_UNDERSCORE unset _remove_bad_NAMES _grep_REGEXP
unset _prefix_PARALLEL_ENV
# Test if environment is too big # Test if environment is too big
if `_which_PAR true` >/dev/null 2>/dev/null ; then if `_which_PAR true` >/dev/null 2>/dev/null ; then
parallel "$@"; parallel "$@"
_parallel_exit_CODE=$? _parallel_exit_CODE=$?
unset PARALLEL_ENV; # Clean up variables/functions
return $_parallel_exit_CODE unset PARALLEL_ENV
unset _which_PAR _which_TRUE
unset _warning_PAR _error_PAR
# Unset _parallel_exit_CODE before return
eval "unset _parallel_exit_CODE; return $_parallel_exit_CODE"
else else
unset PARALLEL_ENV; unset PARALLEL_ENV;
_error_PAR "Your environment is too big." _error_PAR "Your environment is too big."
@ -404,5 +410,7 @@ _parset_main() {
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "'
) )" ) )"
fi fi
return `cat "$_exit_FILE"; rm "$_exit_FILE"` unset _parset_NAME _parset_PARALLEL_PRG _parallel_exit_CODE
# Unset _exit_FILE before return
eval "unset _exit_FILE; return \`cat $_exit_FILE; rm $_exit_FILE\`"
} }

View file

@ -7,8 +7,7 @@
# after which 'env_parallel' works # after which 'env_parallel' works
# #
# #
# Copyright (C) 2016-2019 # Copyright (C) 2016-2019 Ole Tange and Free Software Foundation, Inc.
# Ole Tange and Free Software Foundation, Inc.
# #
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by

View file

@ -7,8 +7,7 @@
# after which 'env_parallel' works # after which 'env_parallel' works
# #
# #
# Copyright (C) 2016-2019 # Copyright (C) 2016-2019 Ole Tange and Free Software Foundation, Inc.
# Ole Tange and Free Software Foundation, Inc.
# #
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
@ -192,9 +191,11 @@ env_parallel() {
# Grep regexp for vars given by --env # Grep regexp for vars given by --env
_grep_REGEXP="`_make_grep_REGEXP \"$@\"`" _grep_REGEXP="`_make_grep_REGEXP \"$@\"`"
unset _make_grep_REGEXP
# Deal with --env _ # Deal with --env _
_ignore_UNDERSCORE="`_get_ignored_VARS \"$@\"`" _ignore_UNDERSCORE="`_get_ignored_VARS \"$@\"`"
unset _get_ignored_VARS
# --record-env # --record-env
if perl -e 'exit grep { /^--record-env$/ } @ARGV' -- "$@"; then if perl -e 'exit grep { /^--record-env$/ } @ARGV' -- "$@"; then
@ -275,17 +276,22 @@ env_parallel() {
eval $_list_variable_VALUES; eval $_list_variable_VALUES;
`" `"
export PARALLEL_ENV export PARALLEL_ENV
unset _list_alias_BODIES unset _list_alias_BODIES _list_variable_VALUES _list_function_BODIES
unset _list_variable_VALUES unset _bodies_of_ALIASES _bodies_of_VARIABLES _bodies_of_FUNCTIONS
unset _list_function_BODIES unset _names_of_ALIASES _names_of_VARIABLES _names_of_FUNCTIONS
unset _grep_REGEXP unset _ignore_HARDCODED _ignore_READONLY _ignore_UNDERSCORE
unset _ignore_UNDERSCORE unset _remove_bad_NAMES _grep_REGEXP
unset _prefix_PARALLEL_ENV
# Test if environment is too big # Test if environment is too big
if `_which_PAR true` >/dev/null 2>/dev/null ; then if `_which_PAR true` >/dev/null 2>/dev/null ; then
parallel "$@"; parallel "$@"
_parallel_exit_CODE=$? _parallel_exit_CODE=$?
unset PARALLEL_ENV; # Clean up variables/functions
return $_parallel_exit_CODE unset PARALLEL_ENV
unset _which_PAR _which_TRUE
unset _warning_PAR _error_PAR
# Unset _parallel_exit_CODE before return
eval "unset _parallel_exit_CODE; return $_parallel_exit_CODE"
else else
unset PARALLEL_ENV; unset PARALLEL_ENV;
_error_PAR "Your environment is too big." _error_PAR "Your environment is too big."
@ -381,5 +387,7 @@ _parset_main() {
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "'
) )" ) )"
fi fi
return `cat "$_exit_FILE"; rm "$_exit_FILE"` unset _parset_NAME _parset_PARALLEL_PRG _parallel_exit_CODE
# Unset _exit_FILE before return
eval "unset _exit_FILE; return \`cat $_exit_FILE; rm $_exit_FILE\`"
} }

View file

@ -415,6 +415,55 @@ sub sharder_script() {
return ::spacefree(1, $script); return ::spacefree(1, $script);
} }
sub binner_script() {
my $script = q{
use B;
# Column separator
my $sep = shift;
# Which columns to shard on (count from 1)
my $col = shift;
# Which columns to shard on (count from 0)
my $col0 = $col - 1;
# Perl expression
my $perlexpr = shift;
my $bins = @ARGV;
# Open fifos for writing, fh{0..$bins}
my $t = 0;
my %fh;
# Let the last output fifo be the 0'th
open $fh{$t++}, ">", pop @ARGV;
for(@ARGV) {
open $fh{$t++}, ">", $_;
# open blocks until it is opened by reader
# so unlink only happens when it is ready
unlink $_;
}
if($perlexpr) {
my $subref = eval("sub { no strict; no warnings; $perlexpr }");
while(<STDIN>) {
# Split into $col columns (no need to split into more)
@F = split $sep, $_, $col+1;
{
local $_ = $F[$col0];
&$subref();
$fh = $fh{ $_%$bins };
}
print $fh $_;
}
} else {
while(<STDIN>) {
# Split into $col columns (no need to split into more)
@F = split $sep, $_, $col+1;
$fh = $fh{ $F[$col0]%$bins };
print $fh $_;
}
}
# Close all open fifos
close values %fh;
};
return ::spacefree(1, $script);
}
sub pipe_shard_setup() { sub pipe_shard_setup() {
# Create temporary fifos # Create temporary fifos
# Run 'shard.pl sep col fifo1 fifo2 fifo3 ... fifoN' in the background # Run 'shard.pl sep col fifo1 fifo2 fifo3 ... fifoN' in the background
@ -435,10 +484,17 @@ sub pipe_shard_setup() {
$parcatfifos[$n][$m] = $shardfifos[$m][$n] = tmpfifo(); $parcatfifos[$n][$m] = $shardfifos[$m][$n] = tmpfifo();
} }
} }
my $script = sharder_script(); my $shardbin = ($opt::shard || $opt::bin);
my $script;
if($opt::bin) {
$script = binner_script();
} else {
$script = sharder_script();
}
# cat foo | sharder sep col fifo1 fifo2 fifo3 ... fifoN # cat foo | sharder sep col fifo1 fifo2 fifo3 ... fifoN
if($opt::shard =~ /^[a-z_][a-z_0-9]*(\s|$)/i) { if($shardbin =~ /^[a-z_][a-z_0-9]*(\s|$)/i) {
# Group by column name # Group by column name
# (Yes, this will also wrongly match a perlexpr like: chop) # (Yes, this will also wrongly match a perlexpr like: chop)
my($read,$char,@line); my($read,$char,@line);
@ -451,7 +507,7 @@ sub pipe_shard_setup() {
$Global::header = join "", @line; $Global::header = join "", @line;
} }
my ($col, $perlexpr, $subref) = my ($col, $perlexpr, $subref) =
column_perlexpr($opt::shard, $Global::header, $opt::colsep); column_perlexpr($shardbin, $Global::header, $opt::colsep);
if(not fork()) { if(not fork()) {
# Let the sharder inherit our stdin # Let the sharder inherit our stdin
# and redirect stdout to null # and redirect stdout to null
@ -1515,6 +1571,7 @@ sub options_hash() {
"pipepart|pipe-part" => \$opt::pipepart, "pipepart|pipe-part" => \$opt::pipepart,
"tee" => \$opt::tee, "tee" => \$opt::tee,
"shard=s" => \$opt::shard, "shard=s" => \$opt::shard,
"bin=s" => \$opt::bin,
"groupby|group-by=s" => \$opt::groupby, "groupby|group-by=s" => \$opt::groupby,
"hgrp|hostgrp|hostgroup|hostgroups" => \$opt::hostgroups, "hgrp|hostgrp|hostgroup|hostgroups" => \$opt::hostgroups,
"embed" => \$opt::embed, "embed" => \$opt::embed,
@ -9319,7 +9376,7 @@ sub start($) {
::set_fh_non_blocking($stdin_fh); ::set_fh_non_blocking($stdin_fh);
} }
$job->set_fh(0,"w",$stdin_fh); $job->set_fh(0,"w",$stdin_fh);
if($opt::tee or $opt::shard) { $job->set_virgin(0); } if($opt::tee or $opt::shard or $opt::bin) { $job->set_virgin(0); }
} elsif ($opt::tty and -c "/dev/tty" and } elsif ($opt::tty and -c "/dev/tty" and
open(my $devtty_fh, "<", "/dev/tty")) { open(my $devtty_fh, "<", "/dev/tty")) {
# Give /dev/tty to the command if no one else is using it # Give /dev/tty to the command if no one else is using it
@ -9818,7 +9875,7 @@ sub print_linebuffer($) {
$outputlength += $rv; $outputlength += $rv;
# TODO --recend # TODO --recend
# Treat both \n and \r as line end # Treat both \n and \r as line end
$i = (rindex($buf,"\n")+1) || (rindex($buf,"\r")+1); $i = ::max((rindex($buf,"\n")+1), (rindex($buf,"\r")+1));
if($i) { if($i) {
# One or more complete lines were found # One or more complete lines were found
if($opt::tag or defined $opt::tagstring) { if($opt::tag or defined $opt::tagstring) {
@ -9828,15 +9885,15 @@ sub print_linebuffer($) {
my $tag = $self->tag(); my $tag = $self->tag();
unshift @$halfline_ref, $tag; unshift @$halfline_ref, $tag;
# TODO --recend that can be partially in @$halfline_ref # TODO --recend that can be partially in @$halfline_ref
substr($buf,0,$i-1) =~ s/(?<=[\n\r])/$tag/gm; substr($buf,0,$i-1) =~ s/(?<=[\n\r])(?=.|$)/$tag/gs;
# The length changed, so find the new ending pos # The length changed, so find the new ending pos
$i = (rindex($buf,"\n")+1) || (rindex($buf,"\r")+1); $i = ::max((rindex($buf,"\n")+1), (rindex($buf,"\r")+1));
} else { } else {
# Replace with freshly computed value of tag # Replace with freshly computed value of tag
unshift @$halfline_ref, $self->tag(); unshift @$halfline_ref, $self->tag();
substr($buf,0,$i-1) =~ s/(?<=[\n\r])/$self->tag()/gme; substr($buf,0,$i-1) =~ s/(?<=[\n\r])(?=.|$)/$self->tag()/gse;
# The length changed, so find the new ending pos # The length changed, so find the new ending pos
$i = (rindex($buf,"\n")+1) || (rindex($buf,"\r")+1); $i = ::max((rindex($buf,"\n")+1), (rindex($buf,"\r")+1));
} }
} }
# Print the partial line (halfline) and the last half # Print the partial line (halfline) and the last half
@ -9930,8 +9987,10 @@ sub print_normal($) {
local $/ = "\n"; local $/ = "\n";
my $tag = $self->tag(); my $tag = $self->tag();
while(<$in_fh>) { while(<$in_fh>) {
print $out_fd $tag,$_;
$outputlength += length $_; $outputlength += length $_;
# Tag lines with \r, too
$_ =~ s/(?<=[\r])(?=.|$)/$tag/gs;
print $out_fd $tag,$_;
if($Global::membuffer) { if($Global::membuffer) {
push @{$self->{'output'}{$fdno}}, $tag, $_; push @{$self->{'output'}{$fdno}}, $tag, $_;
} }
@ -12774,7 +12833,7 @@ sub main() {
pipepart_setup(); pipepart_setup();
} elsif($opt::pipe and $opt::tee) { } elsif($opt::pipe and $opt::tee) {
pipe_tee_setup(); pipe_tee_setup();
} elsif($opt::pipe and $opt::shard) { } elsif($opt::pipe and $opt::shard or $opt::bin) {
pipe_shard_setup(); pipe_shard_setup();
} }
@ -12798,12 +12857,22 @@ sub main() {
$SIG{TERM} = $Global::original_sig{TERM}; $SIG{TERM} = $Global::original_sig{TERM};
$SIG{HUP} = \&start_no_new_jobs; $SIG{HUP} = \&start_no_new_jobs;
if($opt::tee or $opt::shard) { if($opt::tee or $opt::shard or $opt::bin) {
# All jobs must be running in parallel for --tee/--shard # All jobs must be running in parallel for --tee/--shard/--bin
while(start_more_jobs()) {} while(start_more_jobs()) {}
$Global::start_no_new_jobs = 1; $Global::start_no_new_jobs = 1;
if(not $Global::JobQueue->empty()) { if(not $Global::JobQueue->empty()) {
::error("--tee requres --jobs to be higher. Try --jobs 0."); if($opt::tee) {
::error("--tee requires --jobs to be higher. Try --jobs 0.");
} elsif($opt::bin) {
::error("--bin requires --jobs to be higher than the number of",
"arguments. Increase --jobs.");
} elsif($opt::shard) {
::error("--shard requires --jobs to be higher than the number of",
"arguments. Increase --jobs.");
} else {
::die_bug("--bin/--shard/--tee should not get here");
}
::wait_and_exit(255); ::wait_and_exit(255);
} }
} elsif($opt::pipe and not $opt::pipepart) { } elsif($opt::pipe and not $opt::pipepart) {

View file

@ -4020,20 +4020,22 @@ See more B<ssh> tricks on https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies
=head1 EXAMPLE: Parallelizing rsync =head1 EXAMPLE: Parallelizing rsync
B<rsync> is a great tool, but sometimes it will not fill up the B<rsync> is a great tool, but sometimes it will not fill up the
available bandwidth. This is often a problem when copying several big available bandwidth. Running multiple B<rsync> in parallel can fix
files over high speed connections. this.
The following will start one B<rsync> per big file in I<src-dir> to cd src-dir
I<dest-dir> on the server I<fooserver>: find . -type f |
parallel -j10 -X rsync -zR -Ha ./{} fooserver:/dest-dir/
cd src-dir; find . -type f -size +100000 | \ Adjust B<-j10> until you find the optimal number.
parallel -v ssh fooserver mkdir -p /dest-dir/{//}\; \
rsync -s -Havessh {} fooserver:/dest-dir/{}
The dirs created may end up with wrong permissions and smaller files B<rsync -R> will create the needed subdirectories, so all files are
are not being transferred. To fix those run B<rsync> a final time: not put into a single dir. The B<./> is needed so the resulting command
looks similar to:
rsync -Havessh src-dir/ fooserver:/dest-dir/ rsync -zR ././sub/dir/file fooserver:/dest-dir/
The B</./> is what B<rsync -R> works on.
If you are unable to push data, but need to pull them and the files If you are unable to push data, but need to pull them and the files
are called digits.png (e.g. 000000.png) you might be able to do: are called digits.png (e.g. 000000.png) you might be able to do:
@ -4489,8 +4491,8 @@ files:
=head1 SPREADING BLOCKS OF DATA =head1 SPREADING BLOCKS OF DATA
B<--round-robin>, B<--pipe-part>, B<--shard>, and B<--group-by> are B<--round-robin>, B<--pipe-part>, B<--shard>, B<--bin> and
all specialized versions of B<--pipe>. B<--group-by> are all specialized versions of B<--pipe>.
In the following I<n> is the number of jobslots given by B<--jobs>. A In the following I<n> is the number of jobslots given by B<--jobs>. A
record starts with B<--recstart> and ends with B<--recend>. It is record starts with B<--recstart> and ends with B<--recend>. It is
@ -4518,6 +4520,11 @@ value in the given column. Based on this value the line is passed to
one of the I<n> jobs. All lines having this value will be given to the one of the I<n> jobs. All lines having this value will be given to the
same jobslot. same jobslot.
B<--bin> works like B<--shard> but the value of the column is the
jobslot number it will be passed to. If the value is bigger than I<n>,
then I<n> will be subtracted from the value until the values is
smaller than or equal to I<n>.
B<--group-by> starts one job per chunk. Record borders are not given B<--group-by> starts one job per chunk. Record borders are not given
by B<--recend>/B<--recstart>. Instead a record is defined by a number by B<--recend>/B<--recstart>. Instead a record is defined by a number
of lines having the same value in a given column. So the value of a of lines having the same value in a given column. So the value of a

View file

@ -765,6 +765,20 @@ par_profile() {
rm ~/.parallel/testprofile_config rm ~/.parallel/testprofile_config
} }
par_bin() {
echo '### Test --bin'
seq 10 | parallel --pipe --bin 1 -j4 wc | sort
paste <(seq 10) <(seq 10 -1 1) |
parallel --pipe --colsep '\t' --bin 2 -j4 wc | sort
echo '### Test --bin with expression that gives 1..n'
paste <(seq 10) <(seq 10 -1 1) |
parallel --pipe --colsep '\t' --bin '2 $_=$_%2+1' -j4 wc | sort
echo '### Test --bin with expression that gives 0..n-1'
paste <(seq 10) <(seq 10 -1 1) |
parallel --pipe --colsep '\t' --bin '2 $_%=2' -j4 wc | sort
# Fails - blocks!
# paste <(seq 10000000) <(seq 10000000 -1 1) | parallel --pipe --colsep '\t' --bin 2 wc
}
export -f $(compgen -A function | grep par_) export -f $(compgen -A function | grep par_)
compgen -A function | grep par_ | LC_ALL=C sort | compgen -A function | grep par_ | LC_ALL=C sort |

View file

@ -77,7 +77,7 @@ par_testhalt() {
export -f testhalt_false; export -f testhalt_false;
export -f testhalt_true; export -f testhalt_true;
stdout parallel -kj0 --delay 0.11 --tag testhalt_{4} {1},{2}={3} \ stdout parallel -k --delay 0.11 --tag testhalt_{4} {1},{2}={3} \
::: now soon ::: fail success done ::: 0 1 2 30% 70% ::: true false | ::: now soon ::: fail success done ::: 0 1 2 30% 70% ::: true false |
# Remove lines that only show up now and then # Remove lines that only show up now and then
perl -ne '/Starting no more jobs./ or print' perl -ne '/Starting no more jobs./ or print'

View file

@ -77,4 +77,5 @@ par_command_len_shellquote() {
export -f $(compgen -A function | grep par_) export -f $(compgen -A function | grep par_)
compgen -A function | grep par_ | sort -r | compgen -A function | grep par_ | sort -r |
parallel --joblog /tmp/jl-`basename $0` -j3 --tag -k --delay 0.1 --retries 3 '{} 2>&1' # 2019-07-14 100% slowed down 4 threads/16GB
parallel -j75% --joblog /tmp/jl-`basename $0` -j3 --tag -k --delay 0.1 --retries 3 '{} 2>&1'

View file

@ -3307,7 +3307,8 @@ export -f $(compgen -A function | grep par_)
#compgen -A function | grep par_ | sort | #compgen -A function | grep par_ | sort |
compgen -A function | grep par_ | LC_ALL=C sort -r | compgen -A function | grep par_ | LC_ALL=C sort -r |
# parallel --joblog /tmp/jl-`basename $0` --delay $D -j$P --tag -k '{} 2>&1' # parallel --joblog /tmp/jl-`basename $0` --delay $D -j$P --tag -k '{} 2>&1'
parallel --joblog /tmp/jl-`basename $0` -j200% --retries 2 --tag -k '{} 2>&1' | # 2019-07-14 200% too high for 16 GB/4 thread
parallel --joblog /tmp/jl-`basename $0` -j75% --retries 2 --tag -k '{} 2>&1' |
perl -pe 's/line \d?\d\d:/line XXX:/g; perl -pe 's/line \d?\d\d:/line XXX:/g;
s/\d+ >= \d+/XXX >= XXX/; s/\d+ >= \d+/XXX >= XXX/;
s/sh:? \d?\d\d:/sh: XXX:/; s/sh:? \d?\d\d:/sh: XXX:/;

View file

@ -44,6 +44,25 @@ par_basic_halt true
par_basic_halt parallel: Error: --halt must have 'never', 'soon', or 'now'. par_basic_halt parallel: Error: --halt must have 'never', 'soon', or 'now'.
par_basic_halt parallel: Error: --halt soon must be followed by ,success or ,fail. par_basic_halt parallel: Error: --halt soon must be followed by ,success or ,fail.
par_basic_halt parallel: Error: --halt now must be followed by ,success or ,fail. par_basic_halt parallel: Error: --halt now must be followed by ,success or ,fail.
par_bin ### Test --bin
par_bin 2 2 4
par_bin 2 2 4
par_bin 3 3 6
par_bin 3 3 7
par_bin 2 4 8
par_bin 2 4 8
par_bin 3 6 13
par_bin 3 6 13
par_bin ### Test --bin with expression that gives 1..n
par_bin 0 0 0
par_bin 0 0 0
par_bin 5 10 21
par_bin 5 10 21
par_bin ### Test --bin with expression that gives 0..n-1
par_bin 0 0 0
par_bin 0 0 0
par_bin 5 10 21
par_bin 5 10 21
par_blocking_redir 0 0 0 par_blocking_redir 0 0 0
par_blocking_redir 0 0 0 par_blocking_redir 0 0 0
par_blocking_redir 1 9 54 par_blocking_redir 1 9 54
@ -850,7 +869,7 @@ par_tee_too_many_args 1 11
par_tee_too_many_args 2 2 par_tee_too_many_args 2 2
par_tee_too_many_args 3 3 par_tee_too_many_args 3 3
par_tee_too_many_args 4 4 par_tee_too_many_args 4 4
par_tee_too_many_args parallel: Error: --tee requres --jobs to be higher. Try --jobs 0. par_tee_too_many_args parallel: Error: --tee requires --jobs to be higher. Try --jobs 0.
par_test_L_context_replace ### Test -N context replace par_test_L_context_replace ### Test -N context replace
par_test_L_context_replace a1b a2b a3b a4b a5b a6b a7b a8b a9b a10b par_test_L_context_replace a1b a2b a3b a4b a5b a6b a7b a8b a9b a10b
par_test_L_context_replace a11b a12b a13b a14b a15b a16b a17b a18b a19b par_test_L_context_replace a11b a12b a13b a14b a15b a16b a17b a18b a19b

View file

@ -702,45 +702,45 @@ par_semaphore job3b 6
par_semaphore done par_semaphore done
par_shellquote ### Test --shellquote in all shells par_shellquote ### Test --shellquote in all shells
par_shellquote ash ' par_shellquote ash '
par_shellquote ash  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>' par_shellquote ash par_shellquote ash  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>'
par_shellquote bash ' par_shellquote bash '
par_shellquote bash  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>' par_shellquote bash par_shellquote bash  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>'
par_shellquote csh \\\\\\\\ "\ par_shellquote csh \\\\\\\\ "\
par_shellquote csh "\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96> par_shellquote csh "\ \ \ par_shellquote csh \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96>
par_shellquote dash ' par_shellquote dash '
par_shellquote dash  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>' par_shellquote dash par_shellquote dash  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>'
par_shellquote fish ' par_shellquote fish '
par_shellquote fish  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>' par_shellquote fish par_shellquote fish  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>'
par_shellquote fizsh ' par_shellquote fizsh '
par_shellquote fizsh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>' par_shellquote fizsh par_shellquote fizsh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>'
par_shellquote ksh ' par_shellquote ksh '
par_shellquote ksh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>' par_shellquote ksh par_shellquote ksh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>'
par_shellquote ksh93 ' par_shellquote ksh93 '
par_shellquote ksh93  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>' par_shellquote ksh93 par_shellquote ksh93  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>'
par_shellquote lksh ' par_shellquote lksh '
par_shellquote lksh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>' par_shellquote lksh par_shellquote lksh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>'
par_shellquote mksh ' par_shellquote mksh '
par_shellquote mksh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>' par_shellquote mksh par_shellquote mksh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>'
par_shellquote posh ' par_shellquote posh '
par_shellquote posh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>' par_shellquote posh par_shellquote posh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>'
par_shellquote rzsh ' par_shellquote rzsh '
par_shellquote rzsh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>' par_shellquote rzsh par_shellquote rzsh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>'
par_shellquote sash ' par_shellquote sash '
par_shellquote sash  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>' par_shellquote sash par_shellquote sash  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>'
par_shellquote sh ' par_shellquote sh '
par_shellquote sh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>' par_shellquote sh par_shellquote sh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>'
par_shellquote static-sh ' par_shellquote static-sh '
par_shellquote static-sh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>' par_shellquote static-sh par_shellquote static-sh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>'
par_shellquote tcsh \\\\\\\\ "\ par_shellquote tcsh \\\\\\\\ "\
par_shellquote tcsh "\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96> par_shellquote tcsh "\ \ \ par_shellquote tcsh \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96>
par_shellquote yash ' par_shellquote yash '
par_shellquote yash  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>' par_shellquote yash par_shellquote yash  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>'
par_shellquote zsh ' par_shellquote zsh '
par_shellquote zsh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>' par_shellquote zsh par_shellquote zsh  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>'
par_shellquote csh \\\\\\\\ "\ par_shellquote csh \\\\\\\\ "\
par_shellquote csh "\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96> par_shellquote csh "\ \ \ par_shellquote csh \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96>
par_shellquote tcsh \\\\\\\\ "\ par_shellquote tcsh \\\\\\\\ "\
par_shellquote tcsh "\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96> par_shellquote tcsh "\ \ \ par_shellquote tcsh \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96>
par_sockets_cores_threads ### Test --number-of-sockets/cores/threads par_sockets_cores_threads ### Test --number-of-sockets/cores/threads
par_sockets_cores_threads 1 par_sockets_cores_threads 1
par_sockets_cores_threads 2 par_sockets_cores_threads 2

View file

@ -1342,8 +1342,10 @@ par_shard 9 8
par_shard 9 9 par_shard 9 9
par_shard 2 c2 par_shard 2 c2
par_shard *** broken par_shard *** broken
par_shard parallel: Error: --tee requres --jobs to be higher. Try --jobs 0. par_shard parallel: Error: --shard requires --jobs to be higher than the number of
par_shard parallel: Error: --tee requres --jobs to be higher. Try --jobs 0. par_shard parallel: Error: arguments. Increase --jobs.
par_shard parallel: Error: --shard requires --jobs to be higher than the number of
par_shard parallel: Error: arguments. Increase --jobs.
par_slow_args_generation ### Test slow arguments generation - https://savannah.gnu.org/bugs/?32834 par_slow_args_generation ### Test slow arguments generation - https://savannah.gnu.org/bugs/?32834
par_slow_args_generation 1 par_slow_args_generation 1
par_slow_args_generation 2 par_slow_args_generation 2

View file

@ -127,12 +127,12 @@ par_zsh_man exit value 2 should be 2
par_zsh_man Unknown option: no-such-option par_zsh_man Unknown option: no-such-option
par_zsh_man exit value 255 should be 255 par_zsh_man exit value 255 should be 255
par_zsh_funky par_zsh_funky
par_zsh_funky C-] !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>M-<1D>嵗╯丰成帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘M-]睧颬睼麧緗鴇膹擨闀貘覷鏷禴矙𡜍𦶠<F0A19C8D>-funky par_zsh_funky par_zsh_funky C-] !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>M-<1D>嵗╯丰成帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘M-]睧颬睼麧緗鴇膹擨闀貘覷鏷禴矙𡜍𦶠<F0A19C8D>-funky
par_zsh_funky C-] !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>M-<1D>嵗╯丰成帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘M-]睧颬睼麧緗鴇膹擨闀貘覷鏷禴矙𡜍𦶠<F0A19C8D>-funky par_zsh_funky par_zsh_funky C-] !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>M-<1D>嵗╯丰成帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘M-]睧颬睼麧緗鴇膹擨闀貘覷鏷禴矙𡜍𦶠<F0A19C8D>-funky
par_zsh_funky space 6 par_zsh_funky space 6
par_zsh_funky space 6 par_zsh_funky space 6
par_zsh_funky ' ' par_zsh_funky ' '
par_zsh_funky '  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它貝物洎悖停眾斯須號獄播噶擱藏霰匸<E99CB0>帊昅恘倳眑婭笫崷窙嗲睧颬睼麧緗鴇膹擨闀貘覷鏷禴矙𡜍𦶠<F0A19C8D>' par_zsh_funky ' par_zsh_funky  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它貝物洎悖停眾斯須號獄播噶擱藏霰匸<E99CB0>帊昅恘倳眑婭笫崷窙嗲睧颬睼麧緗鴇膹擨闀貘覷鏷禴矙𡜍𦶠<F0A19C8D>'
par_zsh_funky 3 arg alias_works par_zsh_funky 3 arg alias_works
par_zsh_funky 3 arg alias_works_over_ssh par_zsh_funky 3 arg alias_works_over_ssh
par_zsh_funky Funky- par_zsh_funky Funky-
@ -359,108 +359,108 @@ par_zsh_env_parallel bug #52534: Tail of multiline alias is ignored
par_zsh_env_parallel data from stdin par_zsh_env_parallel data from stdin
par_zsh_env_parallel data from stdin par_zsh_env_parallel data from stdin
par_tcsh_underscore ### tcsh par_tcsh_underscore ### tcsh
par_tcsh_underscore ### Testing of --env _ par_tcsh_underscore ### Testing of --env _ par_tcsh_underscore
par_tcsh_underscore #: Command not found. par_tcsh_underscore #: Command not found. par_tcsh_underscore
par_tcsh_underscore variables and arrays in aliases work par_tcsh_underscore variables and arrays in aliases work par_tcsh_underscore
par_tcsh_underscore variables and arrays in aliases work par_tcsh_underscore variables and arrays in aliases work par_tcsh_underscore
par_tcsh_underscore variables and arrays in aliases work par_tcsh_underscore variables and arrays in aliases work par_tcsh_underscore
par_tcsh_underscore variables and arrays in aliases work par_tcsh_underscore variables and arrays in aliases work par_tcsh_underscore
par_tcsh_underscore variables and arrays in aliases work par_tcsh_underscore variables and arrays in aliases work par_tcsh_underscore
par_tcsh_underscore variables and arrays in aliases work par_tcsh_underscore variables and arrays in aliases work par_tcsh_underscore
par_tcsh_underscore myvar: Undefined variable. par_tcsh_underscore myvar: Undefined variable. par_tcsh_underscore
par_tcsh_underscore myvar: Undefined variable. par_tcsh_underscore myvar: Undefined variable. par_tcsh_underscore
par_tcsh_underscore myarray: Undefined variable. par_tcsh_underscore myarray: Undefined variable. par_tcsh_underscore
par_tcsh_underscore myarray: Undefined variable. par_tcsh_underscore myarray: Undefined variable. par_tcsh_underscore
par_tcsh_underscore myecho: Command not found. par_tcsh_underscore myecho: Command not found. par_tcsh_underscore
par_tcsh_underscore OK ^^^^^^^^^^^^^^^^^ if no myecho par_tcsh_underscore OK ^^^^^^^^^^^^^^^^^ if no myecho par_tcsh_underscore
par_tcsh_underscore myecho: Command not found. par_tcsh_underscore myecho: Command not found. par_tcsh_underscore
par_tcsh_underscore OK ^^^^^^^^^^^^^^^^^ if no myecho par_tcsh_underscore OK ^^^^^^^^^^^^^^^^^ if no myecho par_tcsh_underscore
par_tcsh_underscore Connection to lo closed. par_tcsh_underscore Connection to lo closed. par_tcsh_underscore
par_tcsh_parset Not implemented par_tcsh_parset Not implemented
par_tcsh_man ### tcsh par_tcsh_man ### tcsh
par_tcsh_man ### From man env_parallel par_tcsh_man ### From man env_parallel par_tcsh_man
par_tcsh_man #: Command not found. par_tcsh_man #: Command not found. par_tcsh_man
par_tcsh_man aliases with = & " work par_tcsh_man aliases with = & " work par_tcsh_man
par_tcsh_man aliases with = & " work par_tcsh_man aliases with = & " work par_tcsh_man
par_tcsh_man aliases with = & " work par_tcsh_man aliases with = & " work par_tcsh_man
par_tcsh_man aliases with = & " work par_tcsh_man aliases with = & " work par_tcsh_man
par_tcsh_man Functions not supported par_tcsh_man Functions not supported par_tcsh_man
par_tcsh_man #: Command not found. par_tcsh_man #: Command not found. par_tcsh_man
par_tcsh_man #: Command not found. par_tcsh_man #: Command not found. par_tcsh_man
par_tcsh_man variables with = & " work par_tcsh_man variables with = & " work par_tcsh_man
par_tcsh_man variables with = & " work par_tcsh_man variables with = & " work par_tcsh_man
par_tcsh_man variables with = & " work par_tcsh_man variables with = & " work par_tcsh_man
par_tcsh_man variables with = & " work par_tcsh_man variables with = & " work par_tcsh_man
par_tcsh_man #: Command not found. par_tcsh_man #: Command not found. par_tcsh_man
par_tcsh_man arrays par_tcsh_man arrays par_tcsh_man
par_tcsh_man with=&"' par_tcsh_man with=&"' par_tcsh_man
par_tcsh_man work, par_tcsh_man work, par_tcsh_man
par_tcsh_man too par_tcsh_man too par_tcsh_man
par_tcsh_man arrays par_tcsh_man arrays par_tcsh_man
par_tcsh_man with=&"' par_tcsh_man with=&"' par_tcsh_man
par_tcsh_man work, par_tcsh_man work, par_tcsh_man
par_tcsh_man too par_tcsh_man too par_tcsh_man
par_tcsh_man arrays par_tcsh_man arrays par_tcsh_man
par_tcsh_man with=&"' par_tcsh_man with=&"' par_tcsh_man
par_tcsh_man work, par_tcsh_man work, par_tcsh_man
par_tcsh_man too par_tcsh_man too par_tcsh_man
par_tcsh_man arrays par_tcsh_man arrays par_tcsh_man
par_tcsh_man with=&"' par_tcsh_man with=&"' par_tcsh_man
par_tcsh_man work, par_tcsh_man work, par_tcsh_man
par_tcsh_man too par_tcsh_man too par_tcsh_man
par_tcsh_man Segmentation faults? Are you running bsd-csh version 20110502-3? par_tcsh_man Segmentation faults? Are you running bsd-csh version 20110502-3? par_tcsh_man
par_tcsh_man multi par_tcsh_man multi par_tcsh_man
par_tcsh_man level par_tcsh_man level par_tcsh_man
par_tcsh_man env_parallel par_tcsh_man env_parallel par_tcsh_man
par_tcsh_man exit value 2 should be 2 par_tcsh_man exit value 2 should be 2 par_tcsh_man
par_tcsh_man Unknown option: no-such-option par_tcsh_man Unknown option: no-such-option par_tcsh_man
par_tcsh_man Usage: par_tcsh_man Usage: par_tcsh_man
par_tcsh_man par_tcsh_man par_tcsh_man
par_tcsh_man parallel [options] [command [arguments]] < list_of_arguments par_tcsh_man parallel [options] [command [arguments]] < list_of_arguments par_tcsh_man
par_tcsh_man parallel [options] [command [arguments]] (::: arguments|:::: argfile(s))... par_tcsh_man parallel [options] [command [arguments]] (::: arguments|:::: argfile(s))... par_tcsh_man
par_tcsh_man cat ... | parallel --pipe [options] [command [arguments]] par_tcsh_man cat ... | parallel --pipe [options] [command [arguments]] par_tcsh_man
par_tcsh_man par_tcsh_man par_tcsh_man
par_tcsh_man -j n Run n jobs in parallel par_tcsh_man -j n Run n jobs in parallel par_tcsh_man
par_tcsh_man -k Keep same order par_tcsh_man -k Keep same order par_tcsh_man
par_tcsh_man -X Multiple arguments with context replace par_tcsh_man -X Multiple arguments with context replace par_tcsh_man
par_tcsh_man --colsep regexp Split input on regexp for positional replacements par_tcsh_man --colsep regexp Split input on regexp for positional replacements par_tcsh_man
par_tcsh_man {} {.} {/} {/.} {#} {%} {= perl code =} Replacement strings par_tcsh_man {} {.} {/} {/.} {#} {%} {= perl code =} Replacement strings par_tcsh_man
par_tcsh_man {3} {3.} {3/} {3/.} {=3 perl code =} Positional replacement strings par_tcsh_man {3} {3.} {3/} {3/.} {=3 perl code =} Positional replacement strings par_tcsh_man
par_tcsh_man With --plus: {} = {+/}/{/} = {.}.{+.} = {+/}/{/.}.{+.} = {..}.{+..} = par_tcsh_man With --plus: {} = {+/}/{/} = {.}.{+.} = {+/}/{/.}.{+.} = {..}.{+..} = par_tcsh_man
par_tcsh_man {+/}/{/..}.{+..} = {...}.{+...} = {+/}/{/...}.{+...} par_tcsh_man {+/}/{/..}.{+..} = {...}.{+...} = {+/}/{/...}.{+...} par_tcsh_man
par_tcsh_man par_tcsh_man par_tcsh_man
par_tcsh_man -S sshlogin Example: foo@server.example.com par_tcsh_man -S sshlogin Example: foo@server.example.com par_tcsh_man
par_tcsh_man --slf .. Use ~/.parallel/sshloginfile as the list of sshlogins par_tcsh_man --slf .. Use ~/.parallel/sshloginfile as the list of sshlogins par_tcsh_man
par_tcsh_man --trc {}.bar Shorthand for --transfer --return {}.bar --cleanup par_tcsh_man --trc {}.bar Shorthand for --transfer --return {}.bar --cleanup par_tcsh_man
par_tcsh_man --onall Run the given command with argument on all sshlogins par_tcsh_man --onall Run the given command with argument on all sshlogins par_tcsh_man
par_tcsh_man --nonall Run the given command with no arguments on all sshlogins par_tcsh_man --nonall Run the given command with no arguments on all sshlogins par_tcsh_man
par_tcsh_man par_tcsh_man par_tcsh_man
par_tcsh_man --pipe Split stdin (standard input) to multiple jobs. par_tcsh_man --pipe Split stdin (standard input) to multiple jobs. par_tcsh_man
par_tcsh_man --recend str Record end separator for --pipe. par_tcsh_man --recend str Record end separator for --pipe. par_tcsh_man
par_tcsh_man --recstart str Record start separator for --pipe. par_tcsh_man --recstart str Record start separator for --pipe. par_tcsh_man
par_tcsh_man par_tcsh_man par_tcsh_man
par_tcsh_man See 'man parallel' for details par_tcsh_man See 'man parallel' for details par_tcsh_man
par_tcsh_man par_tcsh_man par_tcsh_man
par_tcsh_man Academic tradition requires you to cite works you base your article on. par_tcsh_man Academic tradition requires you to cite works you base your article on. par_tcsh_man
par_tcsh_man If you use programs that use GNU Parallel to process data for an article in a par_tcsh_man If you use programs that use GNU Parallel to process data for an article in a par_tcsh_man
par_tcsh_man scientific publication, please cite: par_tcsh_man scientific publication, please cite: par_tcsh_man
par_tcsh_man par_tcsh_man par_tcsh_man
par_tcsh_man O. Tange (2018): GNU Parallel 2018, Mar 2018, ISBN 9781387509881, par_tcsh_man O. Tange (2018): GNU Parallel 2018, Mar 2018, ISBN 9781387509881, par_tcsh_man
par_tcsh_man DOI https://doi.org/10.5281/zenodo.1146014 par_tcsh_man DOI https://doi.org/10.5281/zenodo.1146014 par_tcsh_man
par_tcsh_man par_tcsh_man par_tcsh_man
par_tcsh_man This helps funding further development; AND IT WON'T COST YOU A CENT. par_tcsh_man This helps funding further development; AND IT WON'T COST YOU A CENT. par_tcsh_man
par_tcsh_man If you pay 10000 EUR you should feel free to use GNU Parallel without citing. par_tcsh_man If you pay 10000 EUR you should feel free to use GNU Parallel without citing. par_tcsh_man
par_tcsh_man par_tcsh_man par_tcsh_man
par_tcsh_man exit value 255 should be 255 par_tcsh_man exit value 255 should be 255 par_tcsh_man
par_tcsh_man Connection to lo closed. par_tcsh_man Connection to lo closed. par_tcsh_man
par_tcsh_funky par_tcsh_funky
par_tcsh_funky par_tcsh_funky
par_tcsh_funky par_tcsh_funky
par_tcsh_funky 3 arg alias_works par_tcsh_funky 3 arg alias_works
par_tcsh_funky 3 arg alias_works_over_ssh par_tcsh_funky 3 arg alias_works_over_ssh
par_tcsh_funky Funky-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funky alias_var_works par_tcsh_funky Funky- par_tcsh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funky alias_var_works
par_tcsh_funky Funky-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funky alias_var_works_over_ssh par_tcsh_funky Funky- par_tcsh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funky alias_var_works_over_ssh
par_tcsh_funky \\\\\\\\ \ \ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䪤Ě声蹾胬𨜏㙡笋蕚𪀔髢𦰡脪𠗫𦖭䓀珢娫糭䨵鞸㘘𩄼疱髿癧α么功吒吭沔坼歿俞枯苒娉珮豹崤淚許廄琵跚愧稞鈾暝蓋墦穀閱璞餐縷擺黠孀髏躡ふж尐佢汻岤狖垥柦胐娖涂罡偅惝牾莍傜揊焮茻鄃幋滜綅赨塿槙箤踊嫹潿蔌醆嬞獦螏餤燡螰駹礒鎪瀙酀瀵騱酅贕鱋鱭𣘀园𧃸檝𠰺<E6AA9D> par_tcsh_funky \\\\\\\\ \ \ \ \ par_tcsh_funky \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䪤Ě声蹾胬𨜏㙡笋蕚𪀔髢𦰡脪𠗫𦖭䓀珢娫糭䨵鞸㘘𩄼疱髿癧α么功吒吭沔坼歿俞枯苒娉珮豹崤淚許廄琵跚愧稞鈾暝蓋墦穀閱璞餐縷擺黠孀髏躡ふж尐佢汻岤狖垥柦胐娖涂罡偅惝牾莍傜揊焮茻鄃幋滜綅赨塿槙箤踊嫹潿蔌醆嬞獦螏餤燡螰駹礒鎪瀙酀瀵騱酅贕鱋鱭𣘀园𧃸檝𠰺<E6AA9D>
par_tcsh_funky func_echo: Command not found. par_tcsh_funky func_echo: Command not found.
par_tcsh_funky func_echo: Command not found. par_tcsh_funky func_echo: Command not found.
par_tcsh_funky myvar works par_tcsh_funky myvar works
@ -568,7 +568,7 @@ par_sh_man Unknown option: no-such-option
par_sh_man exit value 255 should be 255 par_sh_man exit value 255 should be 255
par_sh_funky par_sh_funky
par_sh_funky ' ' par_sh_funky ' '
par_sh_funky '  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>' par_sh_funky ' par_sh_funky  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>'
par_sh_funky 3 arg alias_works par_sh_funky 3 arg alias_works
par_sh_funky 3 arg alias_works_over_ssh par_sh_funky 3 arg alias_works_over_ssh
par_sh_environment_too_big bug #50815: env_parallel should warn if the environment is too big par_sh_environment_too_big bug #50815: env_parallel should warn if the environment is too big
@ -862,12 +862,12 @@ par_mksh_man exit value 2 should be 2
par_mksh_man Unknown option: no-such-option par_mksh_man Unknown option: no-such-option
par_mksh_man exit value 255 should be 255 par_mksh_man exit value 255 should be 255
par_mksh_funky par_mksh_funky
par_mksh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funky par_mksh_funky par_mksh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funky
par_mksh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funky par_mksh_funky par_mksh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funky
par_mksh_funky space 6 par_mksh_funky space 6
par_mksh_funky space 6 par_mksh_funky space 6
par_mksh_funky ' ' par_mksh_funky ' '
par_mksh_funky '  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>' par_mksh_funky ' par_mksh_funky  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>'
par_mksh_funky 3 arg alias_works par_mksh_funky 3 arg alias_works
par_mksh_funky 3 arg alias_works_over_ssh par_mksh_funky 3 arg alias_works_over_ssh
par_mksh_funky Funky- par_mksh_funky Funky-
@ -1203,12 +1203,12 @@ par_ksh_man exit value 2 should be 2
par_ksh_man Unknown option: no-such-option par_ksh_man Unknown option: no-such-option
par_ksh_man exit value 255 should be 255 par_ksh_man exit value 255 should be 255
par_ksh_funky par_ksh_funky
par_ksh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funky par_ksh_funky par_ksh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funky
par_ksh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funky par_ksh_funky par_ksh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funky
par_ksh_funky space 6 par_ksh_funky space 6
par_ksh_funky space 6 par_ksh_funky space 6
par_ksh_funky ' ' par_ksh_funky ' '
par_ksh_funky '  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>' par_ksh_funky ' par_ksh_funky  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>'
par_ksh_funky 3 arg alias_works par_ksh_funky 3 arg alias_works
par_ksh_funky 3 arg alias_works_over_ssh par_ksh_funky 3 arg alias_works_over_ssh
par_ksh_funky Funky- par_ksh_funky Funky-
@ -1517,8 +1517,8 @@ par_fish_funky space 6
par_fish_funky par_fish_funky
par_fish_funky par_fish_funky
par_fish_funky par_fish_funky
par_fish_funky Funky-   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funky par_fish_funky Funky- par_fish_funky   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funky
par_fish_funky Funkyenv-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funkyenv par_fish_funky Funkyenv- par_fish_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funkyenv
par_fish_funky par_fish_funky
par_fish_funky par_fish_funky
par_fish_funky par_fish_funky
@ -1532,13 +1532,13 @@ par_fish_funky space 6
par_fish_funky par_fish_funky
par_fish_funky par_fish_funky
par_fish_funky par_fish_funky
par_fish_funky Funky-   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funky par_fish_funky Funky- par_fish_funky   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funky
par_fish_funky Funkyenv-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funkyenv par_fish_funky Funkyenv- par_fish_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funkyenv
par_fish_funky par_fish_funky
par_fish_funky par_fish_funky
par_fish_funky par_fish_funky
par_fish_funky par_fish_funky
par_fish_funky '   !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>' par_fish_funky ' par_fish_funky   !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>'
par_fish_environment_too_big Not implemented par_fish_environment_too_big Not implemented
par_fish_env_parallel_session ### Test env_parallel --session par_fish_env_parallel_session ### Test env_parallel --session
par_fish_env_parallel_session fish: Unknown command 'aliasbefore must_fail' par_fish_env_parallel_session fish: Unknown command 'aliasbefore must_fail'
@ -1653,7 +1653,7 @@ par_dash_man Unknown option: no-such-option
par_dash_man exit value 255 should be 255 par_dash_man exit value 255 should be 255
par_dash_funky par_dash_funky
par_dash_funky ' ' par_dash_funky ' '
par_dash_funky '  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>' par_dash_funky ' par_dash_funky  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>'
par_dash_funky 3 arg alias_works par_dash_funky 3 arg alias_works
par_dash_funky 3 arg alias_works_over_ssh par_dash_funky 3 arg alias_works_over_ssh
par_dash_environment_too_big bug #50815: env_parallel should warn if the environment is too big par_dash_environment_too_big bug #50815: env_parallel should warn if the environment is too big
@ -1810,23 +1810,23 @@ par_dash_env_parallel bug #52534: Tail of multiline alias is ignored
par_dash_env_parallel data from stdin par_dash_env_parallel data from stdin
par_dash_env_parallel data from stdin par_dash_env_parallel data from stdin
par_csh_underscore ### csh par_csh_underscore ### csh
par_csh_underscore ### Testing of --env _ par_csh_underscore ### Testing of --env _ par_csh_underscore
par_csh_underscore #: Command not found. par_csh_underscore #: Command not found. par_csh_underscore
par_csh_underscore variables and arrays in aliases work par_csh_underscore variables and arrays in aliases work par_csh_underscore
par_csh_underscore variables and arrays in aliases work par_csh_underscore variables and arrays in aliases work par_csh_underscore
par_csh_underscore variables and arrays in aliases work par_csh_underscore variables and arrays in aliases work par_csh_underscore
par_csh_underscore variables and arrays in aliases work par_csh_underscore variables and arrays in aliases work par_csh_underscore
par_csh_underscore variables and arrays in aliases work par_csh_underscore variables and arrays in aliases work par_csh_underscore
par_csh_underscore variables and arrays in aliases work par_csh_underscore variables and arrays in aliases work par_csh_underscore
par_csh_underscore myvar: Undefined variable. par_csh_underscore myvar: Undefined variable. par_csh_underscore
par_csh_underscore myvar: Undefined variable. par_csh_underscore myvar: Undefined variable. par_csh_underscore
par_csh_underscore myarray: Undefined variable. par_csh_underscore myarray: Undefined variable. par_csh_underscore
par_csh_underscore myarray: Undefined variable. par_csh_underscore myarray: Undefined variable. par_csh_underscore
par_csh_underscore myecho: Command not found. par_csh_underscore myecho: Command not found. par_csh_underscore
par_csh_underscore OK ^^^^^^^^^^^^^^^^^ if no myecho par_csh_underscore OK ^^^^^^^^^^^^^^^^^ if no myecho par_csh_underscore
par_csh_underscore myecho: Command not found. par_csh_underscore myecho: Command not found. par_csh_underscore
par_csh_underscore OK ^^^^^^^^^^^^^^^^^ if no myecho par_csh_underscore OK ^^^^^^^^^^^^^^^^^ if no myecho par_csh_underscore
par_csh_underscore Connection to lo closed. par_csh_underscore Connection to lo closed. par_csh_underscore
par_csh_parset Not implemented par_csh_parset Not implemented
par_csh_man ### csh par_csh_man ### csh
par_csh_man par_csh_man
@ -1901,16 +1901,16 @@ par_csh_funky 3 arg alias_works
par_csh_funky par_csh_funky
par_csh_funky myvar works par_csh_funky myvar works
par_csh_funky space special chars problem par_csh_funky space special chars problem
par_csh_funky Funky-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E881B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>聶-funky alias_var_works par_csh_funky Funky- par_csh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E881B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>聶-funky alias_var_works
par_csh_funky func_echo: Command not found. par_csh_funky func_echo: Command not found.
par_csh_funky 3 arg alias_works_over_ssh par_csh_funky 3 arg alias_works_over_ssh
par_csh_funky par_csh_funky
par_csh_funky myvar works par_csh_funky myvar works
par_csh_funky space special chars problem par_csh_funky space special chars problem
par_csh_funky Funky-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E881B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>聶-funky alias_var_works_over_ssh par_csh_funky Funky- par_csh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E881B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>聶-funky alias_var_works_over_ssh
par_csh_funky func_echo: Command not found. par_csh_funky func_echo: Command not found.
par_csh_funky par_csh_funky
par_csh_funky \\\\\\\\ \ \ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~\<5C>\<5C>\擺<><EFBFBD><EFBFBD><EFBFBD><EFBFBD>擺䪤擺Ě擺声擺蹾擺胬擺𨜏擺㙡擺笋擺蕚擺𪀔擺髢擺𦰡擺脪擺𠗫擺𦖭擺䓀擺珢擺娫擺糭擺䨵擺鞸擺㘘擺𩄼擺疱擺髿擺癧擺擺兝擺α擺么擺功擺吒擺吭擺沔擺坼擺歿擺俞擺枯擺苒擺娉擺珮擺豹擺崤擺淚擺許擺廄擺琵擺跚擺愧擺稞擺鈾擺暝擺蓋擺墦擺穀擺閱擺璞<E693BA>\<5C>\黠<><EFBFBD><EFBFBD><EFBFBD><EFBFBD>黠䪤黠Ě黠声黠蹾黠胬黠𨜏黠㙡黠笋黠蕚黠𪀔黠髢黠𦰡黠脪黠𠗫黠𦖭黠䓀黠珢黠娫黠糭黠䨵黠鞸黠㘘黠𩄼黠疱黠髿黠癧黠黠兝黠α黠么黠功黠吒黠吭黠沔黠坼黠歿黠俞黠枯黠苒黠娉黠珮黠豹黠崤黠淚黠許黠廄黠琵黠跚黠愧黠稞黠鈾黠暝黠蓋黠墦黠穀黠閱黠<E996B1> par_csh_funky \\\\\\\\ \ \ \ \ par_csh_funky \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~\<5C>\<5C>\擺<><EFBFBD><EFBFBD><EFBFBD><EFBFBD>擺䪤擺Ě擺声擺蹾擺胬擺𨜏擺㙡擺笋擺蕚擺𪀔擺髢擺𦰡擺脪擺𠗫擺𦖭擺䓀擺珢擺娫擺糭擺䨵擺鞸擺㘘擺𩄼擺疱擺髿擺癧擺擺兝擺α擺么擺功擺吒擺吭擺沔擺坼擺歿擺俞擺枯擺苒擺娉擺珮擺豹擺崤擺淚擺許擺廄擺琵擺跚擺愧擺稞擺鈾擺暝擺蓋擺墦擺穀擺閱擺璞<E693BA>\<5C>\黠<><EFBFBD><EFBFBD><EFBFBD><EFBFBD>黠䪤黠Ě黠声黠蹾黠胬黠𨜏黠㙡黠笋黠蕚黠𪀔黠髢黠𦰡黠脪黠𠗫黠𦖭黠䓀黠珢黠娫黠糭黠䨵黠鞸黠㘘黠𩄼黠疱黠髿黠癧黠黠兝黠α黠么黠功黠吒黠吭黠沔黠坼黠歿黠俞黠枯黠苒黠娉黠珮黠豹黠崤黠淚黠許黠廄黠琵黠跚黠愧黠稞黠鈾黠暝黠蓋黠墦黠穀黠閱黠<E996B1>
par_csh_environment_too_big Not implemented par_csh_environment_too_big Not implemented
par_csh_env_parallel_session Not implemented par_csh_env_parallel_session Not implemented
par_csh_env_parallel bug #50435: Remote fifo broke in 20150522 par_csh_env_parallel bug #50435: Remote fifo broke in 20150522
@ -2064,11 +2064,11 @@ par_bash_funky space 6
par_bash_funky space 6 par_bash_funky space 6
par_bash_funky ' ' par_bash_funky ' '
par_bash_funky ' ' par_bash_funky ' '
par_bash_funky '  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>' par_bash_funky ' par_bash_funky  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>'
par_bash_funky 3 arg alias_works par_bash_funky 3 arg alias_works
par_bash_funky 3 arg alias_works_over_ssh par_bash_funky 3 arg alias_works_over_ssh
par_bash_funky Funkyline-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funkyline par_bash_funky Funkyline- par_bash_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funkyline
par_bash_funky Funkyline-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funkyline par_bash_funky Funkyline- par_bash_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>-funkyline
par_bash_funky Funkymultiline- par_bash_funky Funkymultiline-
par_bash_funky Funkymultiline- par_bash_funky Funkymultiline-
par_bash_funky assoc_val_a par_bash_funky assoc_val_a
@ -2349,7 +2349,7 @@ par_ash_man Unknown option: no-such-option
par_ash_man exit value 255 should be 255 par_ash_man exit value 255 should be 255
par_ash_funky par_ash_funky
par_ash_funky ' ' par_ash_funky ' '
par_ash_funky '  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>' par_ash_funky ' par_ash_funky  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<><7F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪ヌ圴佮迓玿旂衲欶趹欹詘棰葮摵蜠樉賥濋錎膼瀔嚦黀蘜蠲╭帉爎<E5B889>'
par_ash_funky 3 arg alias_works par_ash_funky 3 arg alias_works
par_ash_funky 3 arg alias_works_over_ssh par_ash_funky 3 arg alias_works_over_ssh
par_ash_environment_too_big bug #50815: env_parallel should warn if the environment is too big par_ash_environment_too_big bug #50815: env_parallel should warn if the environment is too big