mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-11-22 14:07:55 +00:00
Merge branch 'master' of ssh://git.sv.gnu.org/srv/git/parallel
This commit is contained in:
commit
2ae423ad88
|
@ -25,45 +25,67 @@
|
|||
# or write to the Free Software Foundation, Inc., 51 Franklin St,
|
||||
# Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
# Supports env of 127426 bytes
|
||||
|
||||
env_parallel() {
|
||||
# env_parallel.bash
|
||||
|
||||
# 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 (.*)
|
||||
local grep_REGEXP="$(
|
||||
perl -e 'for(@ARGV){
|
||||
local _grep_REGEXP="$(
|
||||
perl -e '
|
||||
for(@ARGV){
|
||||
/^_$/ and $next_is_env = 0;
|
||||
$next_is_env and push @envvar, split/,/, $_;
|
||||
$next_is_env=/^--env$/;
|
||||
$next_is_env = /^--env$/;
|
||||
}
|
||||
$vars = join "|",map { quotemeta $_ } @envvar;
|
||||
print $vars ? "($vars)" : "(.*)";
|
||||
' -- "$@"
|
||||
)"
|
||||
# Deal with --env _
|
||||
local _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 $_ } @ignored_vars;
|
||||
print $vars ? "($vars)" : "(,,nO,,VaRs,,)";
|
||||
}
|
||||
}
|
||||
' -- "$@"
|
||||
)"
|
||||
|
||||
# Grep alias names
|
||||
local _alias_NAMES="$(compgen -a |
|
||||
egrep "^${grep_REGEXP}\$")"
|
||||
grep -E "^$_grep_REGEXP"\$ | grep -vE "^$_ignore_UNDERSCORE"\$ )"
|
||||
local _list_alias_BODIES="alias $_alias_NAMES"
|
||||
if [[ "$_alias_NAMES" = "" ]] ; then
|
||||
# no aliases selected
|
||||
_list_alias_BODIES="true"
|
||||
fi
|
||||
unset _alias_NAMES
|
||||
|
||||
# Grep function names
|
||||
local _function_NAMES="$(compgen -A function |
|
||||
egrep "^${grep_REGEXP}\$")"
|
||||
grep -E "^$_grep_REGEXP"\$ | grep -vE "^$_ignore_UNDERSCORE"\$ )"
|
||||
local _list_function_BODIES="typeset -f $_function_NAMES"
|
||||
if [[ "$_function_NAMES" = "" ]] ; then
|
||||
# no functions selected
|
||||
_list_function_BODIES="true"
|
||||
fi
|
||||
unset _function_NAMES
|
||||
|
||||
# Grep variable names
|
||||
local _variable_NAMES="$(compgen -A variable |
|
||||
egrep "^${grep_REGEXP}\$" |
|
||||
grep -E "^$_grep_REGEXP"\$ | grep -vE "^$_ignore_UNDERSCORE"\$ |
|
||||
grep -vFf <(readonly) |
|
||||
egrep -v '^(BASHOPTS|BASHPID|EUID|GROUPS|FUNCNAME|DIRSTACK|_|PIPESTATUS|PPID|SHELLOPTS|UID|USERNAME|BASH_[A-Z_]+)$')"
|
||||
local _list_variable_VALUES="typeset -p $_variable_NAMES"
|
||||
|
@ -71,6 +93,7 @@ env_parallel() {
|
|||
# no variables selected
|
||||
_list_variable_VALUES="true"
|
||||
fi
|
||||
unset _variable_NAMES
|
||||
|
||||
# Copy shopt (so e.g. extended globbing works)
|
||||
# But force expand_aliases as aliases otherwise do not work
|
||||
|
@ -82,20 +105,9 @@ env_parallel() {
|
|||
$_list_alias_BODIES;
|
||||
$_list_variable_VALUES;
|
||||
$_list_function_BODIES)";
|
||||
unset _list_alias_BODIES
|
||||
unset _list_variable_VALUES
|
||||
unset _list_function_BODIES
|
||||
`which parallel` "$@";
|
||||
unset PARALLEL_ENV;
|
||||
}
|
||||
|
||||
# Supports env of 127375 bytes
|
||||
#
|
||||
# _env_parallel() {
|
||||
# # Saving to a tempfile
|
||||
# export PARALLEL_ENV=`tempfile`;
|
||||
# (echo "shopt -s expand_aliases 2>/dev/null"; alias;typeset -p |
|
||||
# grep -vFf <(readonly) |
|
||||
# grep -v 'declare .. (GROUPS|FUNCNAME|DIRSTACK|_|PIPESTATUS|USERNAME|BASH_[A-Z_]+) ';
|
||||
# typeset -f) > $PARALLEL_ENV
|
||||
# `which parallel` "$@";
|
||||
# rm "$PARALLEL_ENV"
|
||||
# unset PARALLEL_ENV;
|
||||
# }
|
||||
|
|
|
@ -29,28 +29,69 @@ if ("`alias env_parallel`" == '') then
|
|||
# Activate alias
|
||||
alias env_parallel 'setenv PARALLEL "\!*"; source `which env_parallel.csh`'
|
||||
else
|
||||
# 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 (.*)
|
||||
set _tMpscRIpt=`tempfile`
|
||||
cat <<'EOF' > $_tMpscRIpt
|
||||
#!/usr/bin/perl
|
||||
|
||||
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)" : "(.*)";
|
||||
'EOF'
|
||||
set _grep_REGEXP="`perl $_tMpscRIpt -- $PARALLEL`"
|
||||
|
||||
# Deal with --env _
|
||||
cat <<'EOF' > $_tMpscRIpt
|
||||
#!/usr/bin/perl
|
||||
|
||||
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 $_ } @ignored_vars;
|
||||
print $vars ? "($vars)" : "(,,nO,,VaRs,,)";
|
||||
}
|
||||
}
|
||||
'EOF'
|
||||
set _ignore_UNDERSCORE="`perl $_tMpscRIpt -- $PARALLEL`"
|
||||
rm $_tMpscRIpt
|
||||
|
||||
# Get the scalar and array variable names
|
||||
set _vARnAmES=(`set | awk -e '{print $1}' |grep -v prompt2`)
|
||||
|
||||
set _vARnAmES=(`set | awk -e '{print $1}' |grep -vE '^(#|_|killring|prompt2|command)$' | grep -E "^$_grep_REGEXP"\$ | grep -vE "^$_ignore_UNDERSCORE"\$`)
|
||||
|
||||
# Make a tmpfile for the variable definitions
|
||||
set _tMpvARfILe=`tempfile`
|
||||
|
||||
# Make a tmpfile for the variable definitions + alias
|
||||
set _tMpaLLfILe=`tempfile`
|
||||
foreach _vARnAmE ($_vARnAmES);
|
||||
# if $?myvar && $#myvar <= 1 echo scalar_myvar=$var
|
||||
eval if'($?'$_vARnAmE' && ${#'$_vARnAmE'} <= 1) echo scalar_'$_vARnAmE'="$'$_vARnAmE'"' >> $_tMpvARfILe;
|
||||
# if $?myvar && $#myvar > 1 echo array_myvar=$var
|
||||
eval if'($?'$_vARnAmE' && ${#'$_vARnAmE'} > 1) echo array_'$_vARnAmE'="$'$_vARnAmE'"' >> $_tMpvARfILe;
|
||||
# if not defined: next
|
||||
eval if'(! $?'$_vARnAmE') continue'
|
||||
# if $#myvar <= 1 echo scalar_myvar=$var
|
||||
eval if'(${#'$_vARnAmE'} <= 1) echo scalar_'$_vARnAmE'='\"\$$_vARnAmE\" >> $_tMpvARfILe;
|
||||
# if $#myvar > 1 echo array_myvar=$var
|
||||
eval if'(${#'$_vARnAmE'} > 1) echo array_'$_vARnAmE'="$'$_vARnAmE'"' >> $_tMpvARfILe;
|
||||
end
|
||||
|
||||
unset _vARnAmE _vARnAmES
|
||||
# shell quote variables (--plain needed due to $PARALLEL abuse)
|
||||
# Convert 'scalar_myvar=...' to 'set myvar=...'
|
||||
# Convert 'array_myvar=...' to 'set array=(...)'
|
||||
cat $_tMpvARfILe | parallel --plain --shellquote | perl -pe 's/^scalar_(\S+).=/set $1=/ or s/^array_(\S+).=(.*)/set $1=($2)/ && s/\\ / /g;' > $_tMpaLLfILe
|
||||
|
||||
# Cleanup
|
||||
rm $_tMpvARfILe; unset _tMpvARfILe _vARnAmE _vARnAmES
|
||||
rm $_tMpvARfILe; unset _tMpvARfILe
|
||||
|
||||
# ALIAS TO EXPORT ALIASES:
|
||||
|
||||
|
@ -61,8 +102,6 @@ else
|
|||
# Quoted: s/\\047/\\047\\042\\047\\042\\047/g\;
|
||||
|
||||
# Remove () from second column
|
||||
# s/^(\S+)(\s+)\((.*)\)/\1\2\3/
|
||||
# \047 => '
|
||||
# s/^(\S+)(\s+)\((.*)\)/\1\2\3/;
|
||||
# Quoted: s/\^\(\\S+\)\(\\s+\)\\\(\(.\*\)\\\)/\\1\\2\\3/\;
|
||||
|
||||
|
@ -79,7 +118,10 @@ else
|
|||
# Prepend with "\nalias "
|
||||
# s/^/\001alias /;
|
||||
# Quoted: s/\^/\\001alias\ /\;
|
||||
alias | perl -pe s/\\047/\\047\\042\\047\\042\\047/g\;s/\^\(\\S+\)\(\\s+\)\\\(\(.\*\)\\\)/\\1\\2\\3/\;s/\^\(\\S+\)\(\\s+\)\(.\*\)/\\1\\2\\047\\3\\047/\;s/\^/\\001alias\ /\;s/\\\!/\\\\\\\!/g >> $_tMpaLLfILe
|
||||
alias | \
|
||||
grep -E "^$_grep_REGEXP" | \
|
||||
grep -vE "^$_ignore_UNDERSCORE""[^_a-zA-Z]" | \
|
||||
perl -pe s/\\047/\\047\\042\\047\\042\\047/g\;s/\^\(\\S+\)\(\\s+\)\\\(\(.\*\)\\\)/\\1\\2\\3/\;s/\^\(\\S+\)\(\\s+\)\(.\*\)/\\1\\2\\047\\3\\047/\;s/\^/\\001alias\ /\;s/\\\!/\\\\\\\!/g >> $_tMpaLLfILe
|
||||
|
||||
setenv PARALLEL_ENV "`cat $_tMpaLLfILe; rm $_tMpaLLfILe`";
|
||||
unset _tMpaLLfILe;
|
||||
|
|
|
@ -44,10 +44,44 @@ function env_parallel
|
|||
# env_parallel.fish
|
||||
setenv PARALLEL_ENV (
|
||||
begin;
|
||||
set _grep_REGEXP (
|
||||
begin;
|
||||
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)" : "(.*)";
|
||||
' -- $argv;
|
||||
end;
|
||||
)
|
||||
# Deal with --env _
|
||||
set _ignore_UNDERSCORE (
|
||||
begin;
|
||||
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 $_ } @ignored_vars;
|
||||
print $vars ? "($vars)" : "(nO,VaRs)";
|
||||
}
|
||||
}
|
||||
' -- $argv;
|
||||
end;
|
||||
)
|
||||
|
||||
# Export function definitions
|
||||
functions -n | perl -pe 's/,/\n/g' | while read d; functions $d; end;
|
||||
functions -n | perl -pe 's/,/\n/g' | grep -E "^$_grep_REGEXP"\$ | grep -vE "^$_ignore_UNDERSCORE"\$ | while read d; functions $d; end;
|
||||
# Convert scalar vars to fish \XX quoting
|
||||
eval (set -L | perl -ne 'chomp;
|
||||
eval (set -L | grep -E "^$_grep_REGEXP " | grep -vE "^$_ignore_UNDERSCORE " | perl -ne 'chomp;
|
||||
($name,$val)=split(/ /,$_,2);
|
||||
$name=~/^(HOME|USER|COLUMNS|FISH_VERSION|LINES|PWD|SHLVL|_|history|status|version)$/ and next;
|
||||
if($val=~/^'"'"'/) { next; }
|
||||
|
@ -55,7 +89,7 @@ function env_parallel
|
|||
')
|
||||
# Generate commands to set scalar variables
|
||||
begin;
|
||||
for v in (set -n);
|
||||
for v in (set -n | grep -E "^$_grep_REGEXP\$" | grep -vE "^$_ignore_UNDERSCORE\$");
|
||||
# Separate variables with the string: \000
|
||||
eval "for i in \$$v;
|
||||
echo -n $v \$i;
|
||||
|
|
|
@ -26,8 +26,82 @@
|
|||
# Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
env_parallel() {
|
||||
# env_parallel.ksh
|
||||
export PARALLEL_ENV="$(alias | perl -pe 's/^/alias /';typeset -p|egrep -v 'typeset( -i)? -r|PIPESTATUS';typeset -f)";
|
||||
`which parallel` "$@";
|
||||
unset PARALLEL_ENV;
|
||||
# env_parallel.ksh
|
||||
|
||||
# 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 $_ } @ignored_vars;
|
||||
print $vars ? "($vars)" : "(,,nO,,VaRs,,)";
|
||||
}
|
||||
}
|
||||
' -- "$@"
|
||||
)"
|
||||
|
||||
# Grep alias names
|
||||
_alias_NAMES="$(alias | perl -pe 's/=.*//' |
|
||||
grep -E "^$_grep_REGEXP"\$ | grep -vE "^$_ignore_UNDERSCORE"\$ )"
|
||||
_list_alias_BODIES="alias $_alias_NAMES | perl -pe 's/^/alias /'"
|
||||
if [[ "$_alias_NAMES" = "" ]] ; then
|
||||
# no aliases selected
|
||||
_list_alias_BODIES="true"
|
||||
fi
|
||||
unset _alias_NAMES
|
||||
|
||||
# Grep function names
|
||||
_function_NAMES="$(typeset +p -f | perl -pe 's/\(\).*//' |
|
||||
grep -E "^$_grep_REGEXP"\$ | grep -vE "^$_ignore_UNDERSCORE"\$ )"
|
||||
_list_function_BODIES="typeset -f $_function_NAMES"
|
||||
if [[ "$_function_NAMES" = "" ]] ; then
|
||||
# no functions selected
|
||||
_list_function_BODIES="true"
|
||||
fi
|
||||
unset _function_NAMES
|
||||
|
||||
# Grep variable names
|
||||
_variable_NAMES="$(typeset +p | perl -pe 's/^typeset .. //' |
|
||||
grep -E "^$_grep_REGEXP"\$ | grep -vE "^$_ignore_UNDERSCORE"\$ |
|
||||
egrep -v '^(PIPESTATUS)$')"
|
||||
_list_variable_VALUES="typeset -p $_variable_NAMES"
|
||||
if [[ "$_variable_NAMES" = "" ]] ; then
|
||||
# no variables selected
|
||||
_list_variable_VALUES="true"
|
||||
fi
|
||||
unset _variable_NAMES
|
||||
|
||||
# eval is needed for aliases - cannot explain why
|
||||
export PARALLEL_ENV="$(
|
||||
eval $_list_alias_BODIES;
|
||||
$_list_variable_VALUES;
|
||||
$_list_function_BODIES)";
|
||||
unset _list_alias_BODIES
|
||||
unset _list_variable_VALUES
|
||||
unset _list_function_BODIES
|
||||
`which parallel` "$@";
|
||||
unset PARALLEL_ENV;
|
||||
}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
#!/bin/pdksh
|
||||
|
||||
# This file must be sourced in ksh:
|
||||
# This file must be sourced in pdksh:
|
||||
#
|
||||
# source `which env_parallel.ksh`
|
||||
# source `which env_parallel.pdksh`
|
||||
#
|
||||
# after which 'env_parallel' works
|
||||
#
|
||||
|
@ -26,8 +26,87 @@
|
|||
# Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
env_parallel() {
|
||||
# env_parallel.pdksh
|
||||
export PARALLEL_ENV="$(alias | perl -pe 's/^/alias /';typeset -p|egrep -v 'typeset( -i)? -r|PIPESTATUS';typeset -f)";
|
||||
`which parallel` "$@";
|
||||
unset PARALLEL_ENV;
|
||||
# env_parallel.pdksh
|
||||
|
||||
# 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 $_ } @ignored_vars;
|
||||
print $vars ? "($vars)" : "(,,nO,,VaRs,,)";
|
||||
}
|
||||
}
|
||||
' -- "$@"
|
||||
)"
|
||||
|
||||
# Grep alias names
|
||||
_alias_NAMES="$(alias | perl -pe 's/=.*//' |
|
||||
grep -E "^$_grep_REGEXP"\$ | grep -vE "^$_ignore_UNDERSCORE"\$ )"
|
||||
_list_alias_BODIES="alias $_alias_NAMES | perl -pe 's/^/alias /'"
|
||||
if [[ "$_alias_NAMES" = "" ]] ; then
|
||||
# no aliases selected
|
||||
_list_alias_BODIES="true"
|
||||
fi
|
||||
unset _alias_NAMES
|
||||
|
||||
# Grep function names
|
||||
_function_NAMES=$(typeset +p -f | perl -pe 's/\(\).*//' |
|
||||
grep -E "^$_grep_REGEXP"\$ | grep -vE "^$_ignore_UNDERSCORE"\$ )
|
||||
_list_function_BODIES="typeset -f $_function_NAMES"
|
||||
if [[ "$_function_NAMES" = "" ]] ; then
|
||||
# no functions selected
|
||||
_list_function_BODIES="true"
|
||||
fi
|
||||
unset _function_NAMES
|
||||
|
||||
# Grep variable names
|
||||
_tmp_READONLY="$(mktemp)"
|
||||
readonly > "$_tmp_READONLY"
|
||||
_variable_NAMES="$(typeset | perl -pe 's/^(type)?set( -.)* //' |
|
||||
grep -E "^$_grep_REGEXP"\$ | grep -vE "^$_ignore_UNDERSCORE"\$ |
|
||||
grep -vFf $_tmp_READONLY |
|
||||
grep -Ev '^(PIPESTATUS)')"
|
||||
rm $_tmp_READONLY
|
||||
unset _tmp_READONLY
|
||||
_list_variable_VALUES="typeset -p $_variable_NAMES"
|
||||
if [[ "$_variable_NAMES" = "" ]] ; then
|
||||
# no variables selected
|
||||
_list_variable_VALUES="true"
|
||||
fi
|
||||
unset _variable_NAMES
|
||||
|
||||
# eval is needed for aliases - cannot explain why
|
||||
export PARALLEL_ENV="$(
|
||||
eval $_list_alias_BODIES;
|
||||
$_list_variable_VALUES;
|
||||
$_list_function_BODIES)";
|
||||
unset _list_alias_BODIES
|
||||
unset _list_variable_VALUES
|
||||
unset _list_function_BODIES
|
||||
`which parallel` "$@";
|
||||
unset PARALLEL_ENV;
|
||||
}
|
||||
|
|
|
@ -160,29 +160,37 @@ E.g. by doing:
|
|||
|
||||
=item aliases
|
||||
|
||||
alias myecho=echo
|
||||
env_parallel myecho ::: test
|
||||
env_parallel -S server myecho ::: test
|
||||
alias myecho 'echo aliases'
|
||||
env_parallel myecho ::: work
|
||||
env_parallel -S server myecho ::: work
|
||||
env_parallel --env myecho myecho ::: work
|
||||
env_parallel --env myecho -S server myecho ::: work
|
||||
|
||||
=item functions
|
||||
|
||||
function myfunc
|
||||
echo $argv
|
||||
echo functions $argv
|
||||
end
|
||||
env_parallel myfunc ::: test
|
||||
env_parallel -S server myfunc ::: test
|
||||
env_parallel myfunc ::: work
|
||||
env_parallel -S server myfunc ::: work
|
||||
env_parallel --env myfunc myfunc ::: work
|
||||
env_parallel --env myfunc -S server myfunc ::: work
|
||||
|
||||
=item variables
|
||||
|
||||
set myvar test
|
||||
env_parallel echo '$myvar' ::: test
|
||||
env_parallel -S server echo '$myvar' ::: test
|
||||
set myvar variables
|
||||
env_parallel echo '$myvar' ::: work
|
||||
env_parallel -S server echo '$myvar' ::: work
|
||||
env_parallel --env myvar echo '$myvar' ::: work
|
||||
env_parallel --env myvar -S server echo '$myvar' ::: work
|
||||
|
||||
=item arrays
|
||||
|
||||
set myarray foo bar baz
|
||||
env_parallel echo '$myarray[{}]' ::: 1 2 3
|
||||
env_parallel -S server echo '$myarray[{}]' ::: 1 2 3
|
||||
set myarray arrays work, too
|
||||
env_parallel -k echo '$myarray[{}]' ::: 1 2 3
|
||||
env_parallel -k -S server echo '$myarray[{}]' ::: 1 2 3
|
||||
env_parallel -k --env myarray echo '$myarray[{}]' ::: 1 2 3
|
||||
env_parallel -k --env myarray -S server echo '$myarray[{}]' ::: 1 2 3
|
||||
|
||||
=back
|
||||
|
||||
|
@ -202,27 +210,35 @@ E.g. by doing:
|
|||
|
||||
=item aliases
|
||||
|
||||
alias myecho=echo
|
||||
env_parallel myecho ::: test
|
||||
env_parallel -S server myecho ::: test
|
||||
alias myecho='echo aliases'
|
||||
env_parallel myecho ::: work
|
||||
env_parallel -S server myecho ::: work
|
||||
env_parallel --env myecho myecho ::: work
|
||||
env_parallel --env myecho -S server myecho ::: work
|
||||
|
||||
=item functions
|
||||
|
||||
myfunc() { echo $*; }
|
||||
env_parallel myfunc ::: test
|
||||
env_parallel -S server myfunc ::: test
|
||||
myfunc() { echo functions $*; }
|
||||
env_parallel myfunc ::: work
|
||||
env_parallel -S server myfunc ::: work
|
||||
env_parallel --env myfunc myfunc ::: work
|
||||
env_parallel --env myfunc -S server myfunc ::: work
|
||||
|
||||
=item variables
|
||||
|
||||
myvar=test
|
||||
env_parallel echo '$myvar' ::: test
|
||||
env_parallel -S server echo '$myvar' ::: test
|
||||
myvar=variables
|
||||
env_parallel echo '$myvar' ::: work
|
||||
env_parallel -S server echo '$myvar' ::: work
|
||||
env_parallel --env myvar echo '$myvar' ::: work
|
||||
env_parallel --env myvar -S server echo '$myvar' ::: work
|
||||
|
||||
=item arrays
|
||||
|
||||
myarray=(foo bar baz)
|
||||
env_parallel echo '${myarray[{}]}' ::: 0 1 2
|
||||
env_parallel -S server echo '${myarray[{}]}' ::: 0 1 2
|
||||
myarray=(arrays work, too)
|
||||
env_parallel -k echo '${myarray[{}]}' ::: 0 1 2
|
||||
env_parallel -k -S server echo '${myarray[{}]}' ::: 0 1 2
|
||||
env_parallel -k --env myarray echo '${myarray[{}]}' ::: 0 1 2
|
||||
env_parallel -k --env myarray -S server echo '${myarray[{}]}' ::: 0 1 2
|
||||
|
||||
=back
|
||||
|
||||
|
@ -242,27 +258,35 @@ E.g. by doing:
|
|||
|
||||
=item aliases
|
||||
|
||||
alias myecho=echo
|
||||
env_parallel myecho ::: test
|
||||
env_parallel -S server myecho ::: test
|
||||
alias myecho="echo aliases";
|
||||
env_parallel myecho ::: work;
|
||||
env_parallel -S server myecho ::: work;
|
||||
env_parallel --env myecho myecho ::: work;
|
||||
env_parallel --env myecho -S server myecho ::: work
|
||||
|
||||
=item functions
|
||||
|
||||
myfunc() { echo $*; }
|
||||
env_parallel myfunc ::: test
|
||||
env_parallel -S server myfunc ::: test
|
||||
myfunc() { echo functions $*; };
|
||||
env_parallel myfunc ::: work;
|
||||
env_parallel -S server myfunc ::: work;
|
||||
env_parallel --env myfunc myfunc ::: work;
|
||||
env_parallel --env myfunc -S server myfunc ::: work
|
||||
|
||||
=item variables
|
||||
|
||||
myvar=test
|
||||
env_parallel echo '$myvar' ::: test
|
||||
env_parallel -S server echo '$myvar' ::: test
|
||||
myvar=variables;
|
||||
env_parallel echo "\$myvar" ::: work;
|
||||
env_parallel -S server echo "\$myvar" ::: work;
|
||||
env_parallel --env myvar echo "\$myvar" ::: work;
|
||||
env_parallel --env myvar -S server echo "\$myvar" ::: work
|
||||
|
||||
=item arrays
|
||||
|
||||
myarray=(foo bar baz)
|
||||
env_parallel echo '${myarray[{}]}' ::: 0 1 2
|
||||
env_parallel -S server echo '${myarray[{}]}' ::: 0 1 2
|
||||
myarray=(arrays work, too);
|
||||
env_parallel -k echo "\${myarray[{}]}" ::: 0 1 2;
|
||||
env_parallel -k -S server echo "\${myarray[{}]}" ::: 0 1 2;
|
||||
env_parallel -k --env myarray echo "\${myarray[{}]}" ::: 0 1 2;
|
||||
env_parallel -k --env myarray -S server echo "\${myarray[{}]}" ::: 0 1 2
|
||||
|
||||
=back
|
||||
|
||||
|
@ -288,6 +312,8 @@ E.g. by doing:
|
|||
alias myecho echo
|
||||
env_parallel myecho ::: test
|
||||
env_parallel -S server myecho ::: test
|
||||
env_parallel --env myecho myecho ::: work
|
||||
env_parallel --env myecho -S server myecho ::: work
|
||||
|
||||
=item functions
|
||||
|
||||
|
@ -298,6 +324,8 @@ Not supported by B<csh>.
|
|||
set myvar=test
|
||||
env_parallel echo "\$myvar" ::: test
|
||||
env_parallel -S csh@server echo "\$myvar" ::: test
|
||||
env_parallel --env myvar echo '$myvar' ::: work
|
||||
env_parallel --env myvar -S server echo '$myvar' ::: work
|
||||
|
||||
|
||||
=item arrays with no special chars
|
||||
|
@ -305,6 +333,8 @@ Not supported by B<csh>.
|
|||
set myarray=(foo bar baz)
|
||||
env_parallel echo "\${myarray\[\{\}\]}" ::: 1 2 3
|
||||
env_parallel -S csh@server echo "\${myarray\[\{\}\]}" ::: 1 2 3
|
||||
env_parallel -k --env myarray echo \$'{myarray[{}]}' ::: 1 2 3
|
||||
env_parallel -k --env myarray -S server echo \$'{myarray[{}]}' ::: 1 2 3
|
||||
|
||||
=back
|
||||
|
||||
|
@ -327,9 +357,11 @@ E.g. by doing:
|
|||
|
||||
=item aliases
|
||||
|
||||
alias myecho echo
|
||||
env_parallel myecho ::: test
|
||||
env_parallel -S server myecho ::: test
|
||||
alias myecho 'echo aliases'
|
||||
env_parallel myecho ::: work
|
||||
env_parallel -S server myecho ::: work
|
||||
env_parallel --env myecho myecho ::: work
|
||||
env_parallel --env myecho -S server myecho ::: work
|
||||
|
||||
=item functions
|
||||
|
||||
|
@ -337,16 +369,19 @@ Not supported by B<tcsh>.
|
|||
|
||||
=item variables
|
||||
|
||||
set myvar=test
|
||||
env_parallel echo "\$myvar" ::: test
|
||||
env_parallel -S tcsh@server echo "\$myvar" ::: test
|
||||
|
||||
set myvar=variables
|
||||
env_parallel echo '$myvar' ::: work
|
||||
env_parallel -S server echo '$myvar' ::: work
|
||||
env_parallel --env myvar echo '$myvar' ::: work
|
||||
env_parallel --env myvar -S server echo '$myvar' ::: work
|
||||
|
||||
=item arrays with no special chars
|
||||
|
||||
set myarray=(foo bar baz)
|
||||
env_parallel echo "\${myarray\[\{\}\]}" ::: 1 2 3
|
||||
env_parallel -S tcsh@server echo "\${myarray\[\{\}\]}" ::: 1 2 3
|
||||
set myarray=(arrays work, too)
|
||||
env_parallel -k echo \$'{myarray[{}]}' ::: 1 2 3
|
||||
env_parallel -k -S server echo \$'{myarray[{}]}' ::: 1 2 3
|
||||
env_parallel -k --env myarray echo \$'{myarray[{}]}' ::: 1 2 3
|
||||
env_parallel -k --env myarray -S server echo \$'{myarray[{}]}' ::: 1 2 3
|
||||
|
||||
=back
|
||||
|
||||
|
|
|
@ -29,8 +29,48 @@ if ("`alias env_parallel`" == '') then
|
|||
# Activate alias
|
||||
alias env_parallel 'setenv PARALLEL "\!*"; source `which env_parallel.tcsh`'
|
||||
else
|
||||
# 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 (.*)
|
||||
set _tMpscRIpt=`tempfile`
|
||||
cat <<'EOF' > $_tMpscRIpt
|
||||
#!/usr/bin/perl
|
||||
|
||||
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)" : "(.*)";
|
||||
'EOF'
|
||||
set _grep_REGEXP="`perl $_tMpscRIpt -- $PARALLEL`"
|
||||
|
||||
# Deal with --env _
|
||||
cat <<'EOF' > $_tMpscRIpt
|
||||
#!/usr/bin/perl
|
||||
|
||||
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 $_ } @ignored_vars;
|
||||
print $vars ? "($vars)" : "(,,nO,,VaRs,,)";
|
||||
}
|
||||
}
|
||||
'EOF'
|
||||
set _ignore_UNDERSCORE="`perl $_tMpscRIpt -- $PARALLEL`"
|
||||
rm $_tMpscRIpt
|
||||
|
||||
# Get the scalar and array variable names
|
||||
set _vARnAmES=(`set | awk -e '{print $1}' |grep -vE '^(_|killring|prompt2)$'`)
|
||||
set _vARnAmES=(`set | awk -e '{print $1}' |grep -vE '^(#|_|killring|prompt2|command)$' | grep -E "^$_grep_REGEXP"\$ | grep -vE "^$_ignore_UNDERSCORE"\$`)
|
||||
|
||||
# Make a tmpfile for the variable definitions
|
||||
set _tMpvARfILe=`tempfile`
|
||||
|
@ -38,18 +78,20 @@ else
|
|||
# Make a tmpfile for the variable definitions + alias
|
||||
set _tMpaLLfILe=`tempfile`
|
||||
foreach _vARnAmE ($_vARnAmES);
|
||||
# if $?myvar && $#myvar <= 1 echo scalar_myvar=$var
|
||||
eval if'($?'$_vARnAmE' && ${#'$_vARnAmE'} <= 1) echo scalar_'$_vARnAmE'='\"\$$_vARnAmE\" >> $_tMpvARfILe;
|
||||
# if $?myvar && $#myvar > 1 echo array_myvar=$var
|
||||
eval if'($?'$_vARnAmE' && ${#'$_vARnAmE'} > 1) echo array_'$_vARnAmE'="$'$_vARnAmE'"' >> $_tMpvARfILe;
|
||||
# if not defined: next
|
||||
eval if'(! $?'$_vARnAmE') continue'
|
||||
# if $#myvar <= 1 echo scalar_myvar=$var
|
||||
eval if'(${#'$_vARnAmE'} <= 1) echo scalar_'$_vARnAmE'='\"\$$_vARnAmE\" >> $_tMpvARfILe;
|
||||
# if $#myvar > 1 echo array_myvar=$var
|
||||
eval if'(${#'$_vARnAmE'} > 1) echo array_'$_vARnAmE'="$'$_vARnAmE'"' >> $_tMpvARfILe;
|
||||
end
|
||||
|
||||
unset _vARnAmE _vARnAmES
|
||||
# shell quote variables (--plain needed due to $PARALLEL abuse)
|
||||
# Convert 'scalar_myvar=...' to 'set myvar=...'
|
||||
# Convert 'array_myvar=...' to 'set array=(...)'
|
||||
cat $_tMpvARfILe | parallel --plain --shellquote | perl -pe 's/^scalar_(\S+).=/set $1=/ or s/^array_(\S+).=(.*)/set $1=($2)/ && s/\\ / /g;' > $_tMpaLLfILe
|
||||
# Cleanup
|
||||
rm $_tMpvARfILe; unset _tMpvARfILe _vARnAmE _vARnAmES
|
||||
rm $_tMpvARfILe; unset _tMpvARfILe
|
||||
|
||||
# ALIAS TO EXPORT ALIASES:
|
||||
|
||||
|
@ -76,7 +118,10 @@ else
|
|||
# Prepend with "\nalias "
|
||||
# s/^/\001alias /;
|
||||
# Quoted: s/\^/\\001alias\ /\;
|
||||
alias | perl -pe s/\\047/\\047\\042\\047\\042\\047/g\;s/\^\(\\S+\)\(\\s+\)\\\(\(.\*\)\\\)/\\1\\2\\3/\;s/\^\(\\S+\)\(\\s+\)\(.\*\)/\\1\\2\\047\\3\\047/\;s/\^/\\001alias\ /\;s/\\\!/\\\\\\\!/g >> $_tMpaLLfILe
|
||||
alias | \
|
||||
grep -E "^$_grep_REGEXP" | \
|
||||
grep -vE "^$_ignore_UNDERSCORE""[^_a-zA-Z]" | \
|
||||
perl -pe s/\\047/\\047\\042\\047\\042\\047/g\;s/\^\(\\S+\)\(\\s+\)\\\(\(.\*\)\\\)/\\1\\2\\3/\;s/\^\(\\S+\)\(\\s+\)\(.\*\)/\\1\\2\\047\\3\\047/\;s/\^/\\001alias\ /\;s/\\\!/\\\\\\\!/g >> $_tMpaLLfILe
|
||||
|
||||
setenv PARALLEL_ENV "`cat $_tMpaLLfILe; rm $_tMpaLLfILe`";
|
||||
unset _tMpaLLfILe;
|
||||
|
|
|
@ -29,30 +29,53 @@ env_parallel() {
|
|||
# env_parallel.zsh
|
||||
|
||||
# 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){
|
||||
_grep_REGEXP="$(
|
||||
perl -e '
|
||||
for(@ARGV){
|
||||
/^_$/ and $next_is_env = 0;
|
||||
$next_is_env and push @envvar, split/,/, $_;
|
||||
$next_is_env=/^--env$/;
|
||||
$next_is_env = /^--env$/;
|
||||
}
|
||||
$vars = join "|",map { quotemeta $_ } @envvar;
|
||||
print $vars ? "($vars)" : "(.*)";
|
||||
' -- "$@"
|
||||
)"
|
||||
# Deal with --env _
|
||||
local _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 $_ } @ignored_vars;
|
||||
print $vars ? "($vars)" : "(,,nO,,VaRs,,)";
|
||||
}
|
||||
}
|
||||
' -- "$@"
|
||||
)"
|
||||
|
||||
# Grep alias names
|
||||
_alias_NAMES="$(print -l ${(k)aliases} |
|
||||
egrep "^${grep_REGEXP}\$")"
|
||||
grep -E "^$_grep_REGEXP"\$ | grep -vE "^$_ignore_UNDERSCORE"\$ )"
|
||||
_list_alias_BODIES="alias "$(echo $_alias_NAMES|xargs)" | perl -pe 's/^/alias /'"
|
||||
if [[ "$_alias_NAMES" = "" ]] ; then
|
||||
# no aliases selected
|
||||
_list_alias_BODIES="true"
|
||||
fi
|
||||
unset _alias_NAMES
|
||||
|
||||
# Grep function names
|
||||
_function_NAMES="$(print -l ${(k)functions} |
|
||||
egrep "^${grep_REGEXP}\$" |
|
||||
grep -E "^$_grep_REGEXP\$" | grep -vE "^$_ignore_UNDERSCORE\$" |
|
||||
grep -v '='
|
||||
)"
|
||||
_list_function_BODIES="typeset -f "$(echo $_function_NAMES|xargs)
|
||||
|
@ -60,11 +83,12 @@ env_parallel() {
|
|||
# no functions selected
|
||||
_list_function_BODIES="true"
|
||||
fi
|
||||
unset _function_NAMES
|
||||
|
||||
# Grep variable names
|
||||
# The egrep -v is crap and should be better
|
||||
_variable_NAMES="$(print -l ${(k)parameters} |
|
||||
egrep "^${grep_REGEXP}\$" |
|
||||
grep -E "^$_grep_REGEXP"\$ | grep -vE "^$_ignore_UNDERSCORE"\$ |
|
||||
egrep -v '^([-?#!$*@_0]|zsh_eval_context|ZSH_EVAL_CONTEXT|LINENO|IFS|commands|functions|options|aliases|EUID|EGID|UID|GID)$' |
|
||||
egrep -v 'terminfo|funcstack|galiases|keymaps|parameters|jobdirs|dirstack|functrace|funcsourcetrace|zsh_scheduled_events|dis_aliases|dis_reswords|dis_saliases|modules|reswords|saliases|widgets|userdirs|historywords|nameddirs|termcap|dis_builtins|dis_functions|jobtexts|funcfiletrace|dis_galiases|builtins|history|jobstates'
|
||||
)"
|
||||
|
@ -75,24 +99,17 @@ env_parallel() {
|
|||
# no variables selected
|
||||
_list_variable_VALUES="true"
|
||||
fi
|
||||
unset _variable_NAMES
|
||||
|
||||
export PARALLEL_ENV="$(
|
||||
eval $_list_alias_BODIES;
|
||||
eval $_list_function_BODIES;
|
||||
eval $_list_variable_VALUES;
|
||||
|
||||
)";
|
||||
|
||||
unset _list_alias_BODIES
|
||||
unset _list_variable_VALUES
|
||||
unset _list_function_BODIES
|
||||
`which parallel` "$@";
|
||||
unset PARALLEL_ENV;
|
||||
}
|
||||
|
||||
_old_env_parallel() {
|
||||
# env_parallel.zsh
|
||||
export PARALLEL_ENV="$(alias | perl -pe 's/^/alias /'; typeset -p |
|
||||
grep -aFvf <(typeset -pr) |
|
||||
egrep -iav 'ZSH_EVAL_CONTEXT|LINENO=| _=|aliases|^typeset [a-z_]+$'|
|
||||
egrep -av '^(typeset -A (commands|functions|options)|typeset IFS=|..$)|cyan';
|
||||
typeset -f)";
|
||||
parallel "$@";
|
||||
unset PARALLEL_ENV;
|
||||
}
|
||||
|
|
153
src/parallel
153
src/parallel
|
@ -191,10 +191,10 @@ reaper();
|
|||
::debug("init", "Done reaping\n");
|
||||
if($opt::pipe and @opt::a) {
|
||||
for my $job (@Global::tee_jobs) {
|
||||
unlink $job->fh(2,"name");
|
||||
::rm($job->fh(2,"name"));
|
||||
$job->set_fh(2,"name","");
|
||||
$job->print();
|
||||
unlink $job->fh(1,"name");
|
||||
::rm($job->fh(1,"name"));
|
||||
}
|
||||
}
|
||||
::debug("init", "Cleaning\n");
|
||||
|
@ -1208,7 +1208,7 @@ sub check_invalid_option_combinations {
|
|||
|
||||
sub init_globals {
|
||||
# Defaults:
|
||||
$Global::version = 20160627;
|
||||
$Global::version = 20160704;
|
||||
$Global::progname = 'parallel';
|
||||
$Global::infinity = 2**31;
|
||||
$Global::debug = 0;
|
||||
|
@ -1953,7 +1953,7 @@ sub save_stdin_stdout_stderr {
|
|||
# $Global::original_stderr
|
||||
# $Global::original_stdin
|
||||
# Returns: N/A
|
||||
|
||||
|
||||
# TODO Disabled until we have an open3 that will take n filehandles
|
||||
# for my $fdno (1..61) {
|
||||
# # /dev/fd/62 and above are used by bash for <(cmd)
|
||||
|
@ -3181,7 +3181,7 @@ sub parallelized_host_filtering {
|
|||
::debug("init", $cmd, "\n");
|
||||
my @out;
|
||||
my $prepend = "";
|
||||
|
||||
|
||||
my ($host_fh,$in,$err);
|
||||
open3($in, $host_fh, $err, $cmd) || ::die_bug("parallel host check: $cmd");
|
||||
if(not fork()) {
|
||||
|
@ -3488,6 +3488,7 @@ sub reaper {
|
|||
::wait_and_exit($Global::halt_exitstatus);
|
||||
}
|
||||
}
|
||||
$job->cleanup();
|
||||
start_more_jobs();
|
||||
if($opt::progress) {
|
||||
my %progress = progress();
|
||||
|
@ -3814,6 +3815,7 @@ sub tmpfile {
|
|||
sub tmpname {
|
||||
# Select a name that does not exist
|
||||
# Do not create the file as it may be used for creating a socket (by tmux)
|
||||
# Remember the name in $Global::unlink to avoid hitting the same name twice
|
||||
my $name = shift;
|
||||
my($tmpname);
|
||||
if(not -w $ENV{'TMPDIR'}) {
|
||||
|
@ -3832,13 +3834,21 @@ sub tmpname {
|
|||
}
|
||||
|
||||
sub tmpfifo {
|
||||
# Securely make a fifo by securely making a dir with a fifo in it
|
||||
# Find an unused name and mkfifo on it
|
||||
use POSIX qw(mkfifo);
|
||||
my $tmpfifo = tmpname("fif",@_);
|
||||
mkfifo($tmpfifo,0600);
|
||||
return $tmpfifo;
|
||||
}
|
||||
|
||||
sub rm {
|
||||
# Remove file and remove it from %Global::unlink
|
||||
# Uses:
|
||||
# %Global::unlink
|
||||
delete @Global::unlink{@_};
|
||||
unlink @_;
|
||||
}
|
||||
|
||||
sub size_of_block_dev {
|
||||
# Like -s but for block devices
|
||||
# Input:
|
||||
|
@ -4452,8 +4462,8 @@ sub new {
|
|||
sub DESTROY {
|
||||
my $self = shift;
|
||||
# Remove temporary files if they are created.
|
||||
unlink $self->{'loadavg_file'};
|
||||
unlink $self->{'swap_activity_file'};
|
||||
::rm($self->{'loadavg_file'});
|
||||
::rm($self->{'swap_activity_file'});
|
||||
}
|
||||
|
||||
sub string {
|
||||
|
@ -6158,6 +6168,8 @@ sub new {
|
|||
# filehandle for stdin (used for --pipe)
|
||||
# filename for writing stdout to (used for --files)
|
||||
# remaining data not sent to stdin (used for --pipe)
|
||||
# tmpfiles to cleanup when job is done
|
||||
'unlink' => [],
|
||||
# amount of data sent via stdin (used for --pipe)
|
||||
'transfersize' => 0, # size of files using --transfer
|
||||
'returnsize' => 0, # size of files using --return
|
||||
|
@ -6381,6 +6393,25 @@ sub openoutputfiles {
|
|||
}
|
||||
}
|
||||
|
||||
sub add_rm {
|
||||
# Files to remove when job is done
|
||||
my $self = shift;
|
||||
push $self->{'unlink'}, @_;
|
||||
}
|
||||
|
||||
sub get_rm {
|
||||
# Files to remove when job is done
|
||||
my $self = shift;
|
||||
return @{$self->{'unlink'}};
|
||||
}
|
||||
|
||||
sub cleanup {
|
||||
# Remove files when job is done
|
||||
my $self = shift;
|
||||
unlink $self->get_rm();
|
||||
delete @Global::unlink{$self->get_rm()};
|
||||
}
|
||||
|
||||
sub grouped {
|
||||
my $self = shift;
|
||||
# Set reading FD if using --group (--ungroup does not need)
|
||||
|
@ -6392,7 +6423,7 @@ sub grouped {
|
|||
::die_bug("fdr: Cannot open ".$self->fh($fdno,'name'));
|
||||
$self->set_fh($fdno,'r',$fdr);
|
||||
# Unlink if required
|
||||
$Global::debug or unlink $self->fh($fdno,"unlink");
|
||||
$Global::debug or ::rm($self->fh($fdno,"unlink"));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7402,7 +7433,7 @@ sub sshcleanup {
|
|||
my $workdir = $self->workdir();
|
||||
my $cleancmd = "";
|
||||
|
||||
for my $file ($self->cleanup()) {
|
||||
for my $file ($self->remote_cleanup()) {
|
||||
my @subworkdirs = parentdirs_of($file);
|
||||
$cleancmd .= $sshlogin->cleanup_cmd($file,$workdir).";";
|
||||
}
|
||||
|
@ -7412,7 +7443,7 @@ sub sshcleanup {
|
|||
return $cleancmd;
|
||||
}
|
||||
|
||||
sub cleanup {
|
||||
sub remote_cleanup {
|
||||
# Returns:
|
||||
# Files to remove at cleanup
|
||||
my $self = shift;
|
||||
|
@ -7602,6 +7633,7 @@ sub start {
|
|||
$ENV{'PARALLEL_SEQ'} = $job->seq();
|
||||
$ENV{'PARALLEL_PID'} = $$;
|
||||
$ENV{'PARALLEL_TMP'} = ::tmpname("par");
|
||||
$job->add_rm($ENV{'PARALLEL_TMP'});
|
||||
::debug("run", $Global::total_running, " processes . Starting (",
|
||||
$job->seq(), "): $command\n");
|
||||
if($opt::pipe) {
|
||||
|
@ -7721,6 +7753,7 @@ sub print_dryrun_and_verbose {
|
|||
my $actual_command = shift;
|
||||
# Temporary file name. Used for fifo to communicate exit val
|
||||
my $tmpfifo=::tmpname("tmx");
|
||||
$self->add_rm($tmpfifo);
|
||||
|
||||
if(length($tmpfifo) >=100) {
|
||||
::error("tmux does not support sockets with path > 100.");
|
||||
|
@ -7882,7 +7915,7 @@ sub print {
|
|||
if($opt::dryrun) {
|
||||
# Nothing was printed to this job:
|
||||
# cleanup tmp files if --files was set
|
||||
unlink $self->fh(1,"name");
|
||||
::rm($self->fh(1,"name"));
|
||||
}
|
||||
if($opt::pipe and $self->virgin()) {
|
||||
# Skip --joblog, --dryrun, --verbose
|
||||
|
@ -7973,8 +8006,8 @@ sub files_print {
|
|||
# Nothing was printed to this job:
|
||||
# cleanup unused tmp files if --files was set
|
||||
for my $fdno (1,2) {
|
||||
unlink $self->fh($fdno,"name");
|
||||
unlink $self->fh($fdno,"unlink");
|
||||
::rm($self->fh($fdno,"name"));
|
||||
::rm($self->fh($fdno,"unlink"));
|
||||
}
|
||||
} elsif($fdno == 1 and $self->fh($fdno,"name")) {
|
||||
print $out_fd $self->tag(),$self->fh($fdno,"name"),"\n";
|
||||
|
@ -8000,7 +8033,6 @@ sub linebuffer_print {
|
|||
}
|
||||
if($opt::compress) {
|
||||
# Blocked reading in final round
|
||||
$Global::use{"Fcntl"} ||= eval "use Fcntl qw(:DEFAULT :flock); 1;";
|
||||
for my $fdno (1,2) {
|
||||
::set_fh_blocking($self->fh($fdno,'r'));
|
||||
}
|
||||
|
@ -8051,7 +8083,28 @@ sub linebuffer_print {
|
|||
if($self->fh($fdno,"rpid") and CORE::kill 0, $self->fh($fdno,"rpid")) {
|
||||
# decompress still running
|
||||
} else {
|
||||
# decompress done: close fh
|
||||
# decompress done:
|
||||
# copy to sql (if needed)
|
||||
# then close fh
|
||||
if($opt::sqlworker) {
|
||||
my @output;
|
||||
my $tag = $self->tag();
|
||||
seek $in_fh, 0, 0;
|
||||
while(<$in_fh>) {
|
||||
push @output, $tag,$_;
|
||||
}
|
||||
if($fdno == 1) {
|
||||
if(not $opt::results) {
|
||||
$Global::sql->update("SET Stdout = ? WHERE Seq = ".$self->seq(),
|
||||
join("",@output));
|
||||
}
|
||||
} else {
|
||||
if(not $opt::results) {
|
||||
$Global::sql->update("SET Stderr = ? WHERE Seq = ".$self->seq(),
|
||||
join("",@output));
|
||||
}
|
||||
}
|
||||
}
|
||||
close $in_fh;
|
||||
if($? and $opt::compress) {
|
||||
::error($opt::decompress_program." failed.");
|
||||
|
@ -8075,12 +8128,25 @@ sub tag_print {
|
|||
# $in_fh is now ready for reading at position 0
|
||||
my $tag = $self->tag();
|
||||
my $outputlength = 0;
|
||||
my @output;
|
||||
while(<$in_fh>) {
|
||||
print $out_fd $tag,$_;
|
||||
$outputlength += length $_;
|
||||
if($opt::sqlworker) {
|
||||
push @output, $tag,$_;
|
||||
}
|
||||
}
|
||||
if($fdno == 1) {
|
||||
$self->add_returnsize($outputlength);
|
||||
if($opt::sqlworker and not $opt::results) {
|
||||
$Global::sql->update("SET Stdout = ? WHERE Seq = ".$self->seq(),
|
||||
join("",@output));
|
||||
}
|
||||
} else {
|
||||
if($opt::sqlworker and not $opt::results) {
|
||||
$Global::sql->update("SET Stderr = ? WHERE Seq = ".$self->seq(),
|
||||
join("",@output));
|
||||
}
|
||||
}
|
||||
close $in_fh;
|
||||
if($? and $opt::compress) {
|
||||
|
@ -8149,13 +8215,13 @@ sub print_joblog {
|
|||
|
||||
sub tag {
|
||||
my $self = shift;
|
||||
if($opt::tag or defined $opt::tagstring) {
|
||||
if(not defined $self->{'tag'}) {
|
||||
if(not defined $self->{'tag'}) {
|
||||
if($opt::tag or defined $opt::tagstring) {
|
||||
$self->{'tag'} = $self->{'commandline'}->
|
||||
replace_placeholders([$opt::tagstring],0,0)."\t";
|
||||
} else {
|
||||
$self->{'tag'} = "";
|
||||
}
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
return $self->{'tag'};
|
||||
}
|
||||
|
@ -9223,7 +9289,7 @@ sub tmux_length {
|
|||
my $tmuxcmd = $ENV{'TMUX'}." -S $tmpfile new-session -d -n echo $l".
|
||||
("x"x$l). " && echo $l; rm -f $tmpfile";
|
||||
push @out, ::qqx($tmuxcmd);
|
||||
unlink $tmpfile;
|
||||
::rm($tmpfile);
|
||||
}
|
||||
::debug("tmux","tmux-out ",@out);
|
||||
chomp @out;
|
||||
|
@ -9904,6 +9970,13 @@ sub new {
|
|||
my $dbh = DBI->connect($dsn, $userid, $password,
|
||||
{ RaiseError => 1, AutoInactiveDestroy => 1 })
|
||||
or die $DBI::errstr;
|
||||
$dbh->{'PrintWarn'} = $Global::debug || 0;
|
||||
$dbh->{'PrintError'} = $Global::debug || 0;
|
||||
$dbh->{'RaiseError'} = 1;
|
||||
$dbh->{'ShowErrorStatement'} = 1;
|
||||
$dbh->{'HandleError'} = sub {};
|
||||
|
||||
|
||||
return bless {
|
||||
'dbh' => $dbh,
|
||||
'driver' => $driver,
|
||||
|
@ -10079,19 +10152,40 @@ sub run {
|
|||
my $lockretry = 0;
|
||||
while($lockretry < 10) {
|
||||
$sth = $dbh->prepare($stmt);
|
||||
if($rv = $sth->execute(@_)) {
|
||||
if($sth
|
||||
and
|
||||
eval { $rv = $sth->execute(@_) }) {
|
||||
last;
|
||||
} else {
|
||||
if($@ =~ /no such table|Table .* doesn.t exist|relation ".*" does not exist/
|
||||
or
|
||||
$DBI::errstr =~ /no such table|Table .* doesn.t exist|relation ".*" does not exist/) {
|
||||
# This is fine:
|
||||
# It is just a worker that reported back too late -
|
||||
# another worker had finished the job first
|
||||
# and the table was then dropped
|
||||
$rv = $sth = 0;
|
||||
last;
|
||||
}
|
||||
if($DBI::errstr =~ /locked/) {
|
||||
::debug("sql","Lock retry: $lockretry");
|
||||
$lockretry++;
|
||||
::usleep(rand()*300);
|
||||
} elsif(not $sth) {
|
||||
# Try again
|
||||
$lockretry++;
|
||||
} else {
|
||||
::error($DBI::errstr);
|
||||
::wait_and_exit(255);
|
||||
}
|
||||
}
|
||||
}
|
||||
if($lockretry >= 10) {
|
||||
::die_bug("retry > 10: $DBI::errstr");
|
||||
}
|
||||
if($rv < 0){
|
||||
print $DBI::errstr;
|
||||
::error($DBI::errstr);
|
||||
::wait_and_exit(255);
|
||||
}
|
||||
return $sth;
|
||||
}
|
||||
|
@ -10100,7 +10194,8 @@ sub get {
|
|||
my $self = shift;
|
||||
my $sth = $self->run(@_);
|
||||
my @retval;
|
||||
while(1) {
|
||||
# If $sth = 0 it means the table was dropped by another process
|
||||
while($sth) {
|
||||
my @row = $sth->fetchrow_array();
|
||||
@row or last;
|
||||
push @retval, \@row;
|
||||
|
@ -10269,7 +10364,7 @@ sub remove_dead_locks {
|
|||
if($host eq ::hostname()) {
|
||||
if(not kill 0, $pid) {
|
||||
::debug("sem", "Dead: $d\n");
|
||||
unlink $d;
|
||||
::rm($d);
|
||||
} else {
|
||||
::debug("sem", "Alive: $d\n");
|
||||
}
|
||||
|
@ -10318,12 +10413,12 @@ sub acquire {
|
|||
|
||||
sub release {
|
||||
my $self = shift;
|
||||
unlink $self->{'pidfile'};
|
||||
::rm($self->{'pidfile'});
|
||||
if($self->nlinks() == 1) {
|
||||
# This is the last link, so atomic cleanup
|
||||
$self->lock();
|
||||
if($self->nlinks() == 1) {
|
||||
unlink $self->{'idfile'};
|
||||
::rm($self->{'idfile'});
|
||||
rmdir $self->{'lockdir'};
|
||||
}
|
||||
$self->unlock();
|
||||
|
@ -10341,7 +10436,7 @@ sub pid_change {
|
|||
$self->{'pidfile'} = $self->{'lockdir'}."/".$$.'@'.::hostname();
|
||||
my $retval = link $self->{'idfile'}, $self->{'pidfile'};
|
||||
::debug("sem","link($self->{'idfile'},$self->{'pidfile'})=$retval\n");
|
||||
unlink $old_pidfile;
|
||||
::rm($old_pidfile);
|
||||
}
|
||||
|
||||
sub atomic_link_if_count_less_than {
|
||||
|
@ -10439,7 +10534,7 @@ sub lock {
|
|||
|
||||
sub unlock {
|
||||
my $self = shift;
|
||||
unlink $self->{'lockfile'};
|
||||
::rm($self->{'lockfile'});
|
||||
close $self->{'lockfh'};
|
||||
::debug("run", "unlocked\n");
|
||||
}
|
||||
|
|
|
@ -2902,30 +2902,87 @@ Or if the regexps are fixed strings:
|
|||
|
||||
grep -F -f regexps.txt bigfile
|
||||
|
||||
There are 2 limiting factors: CPU and disk I/O. CPU is easy to
|
||||
measure: If the B<grep> takes >90% CPU (e.g. when running top), then the
|
||||
CPU is a limiting factor, and parallelization will speed this up. If
|
||||
not, then disk I/O is the limiting factor, and depending on the disk
|
||||
system it may be faster or slower to parallelize. The only way to know
|
||||
for certain is to measure.
|
||||
There are 3 limiting factors: CPU, RAM, and disk I/O.
|
||||
|
||||
If the CPU is the limiting factor parallelization should be done on the regexps:
|
||||
RAM is easy to measure: If the B<grep> process takes up most of your
|
||||
free memory (e.g. when running B<top>), then RAM is a limiting factor.
|
||||
|
||||
cat regexp.txt | parallel --pipe -L1000 --round-robin grep -f - bigfile
|
||||
CPU is also easy to measure: If the B<grep> takes >90% CPU in B<top>,
|
||||
then the CPU is a limiting factor, and parallelization will speed this
|
||||
up.
|
||||
|
||||
If a line matches multiple regexps, the line may be duplicated. The
|
||||
command will start one B<grep> per CPU and read I<bigfile> one time
|
||||
per CPU, but as that is done in parallel, all reads except the first
|
||||
will be cached in RAM. Depending on the size of I<regexp.txt> it may
|
||||
be faster to use B<--block 10m> instead of B<-L1000>. If I<regexp.txt>
|
||||
is too big to fit in RAM, remove B<--round-robin> and adjust
|
||||
B<-L1000>. This will cause I<bigfile> to be read more times.
|
||||
It is harder to see if disk I/O is the limiting factor, and depending
|
||||
on the disk system it may be faster or slower to parallelize. The only
|
||||
way to know for certain is to test and measure.
|
||||
|
||||
|
||||
=head2 Limiting factor: RAM
|
||||
|
||||
The normal B<grep -f regexs.txt bigfile> works no matter the size of
|
||||
bigfile, but if regexps.txt is so big it cannot fit into memory, then
|
||||
you need to split this.
|
||||
|
||||
B<grep -F> takes around 100 bytes of RAM and B<grep> takes about 500
|
||||
bytes of RAM per 1 byte of regexp. So if regexps.txt is 1% of your
|
||||
RAM, then it may be too big.
|
||||
|
||||
If you can convert your regexps into fixed strings do that. E.g. if
|
||||
the lines you are looking for in bigfile all looks like:
|
||||
|
||||
ID1 foo bar baz Identifier1 quux
|
||||
fubar ID2 foo bar baz Identifier2
|
||||
|
||||
then your regexps.txt can be converted from:
|
||||
|
||||
ID1.*Identifier1
|
||||
ID2.*Identifier2
|
||||
|
||||
into:
|
||||
|
||||
ID1 foo bar baz Identifier1
|
||||
ID2 foo bar baz Identifier2
|
||||
|
||||
This way you can use B<grep -F> which takes around 80% less memory and
|
||||
is much faster.
|
||||
|
||||
If it still does not fit in memory you can do this:
|
||||
|
||||
parallel --pipepart -a regexps.txt --block 1M grep -F -f - -n bigfile |
|
||||
sort -un | perl -pe 's/^\d+://'
|
||||
|
||||
The 1M should be your free memory divided by the number of cores and
|
||||
divided by 200 for B<grep -F> and by 1000 for normal B<grep>. On
|
||||
GNU/Linux you can do:
|
||||
|
||||
free=$(awk '/^((Swap)?Cached|MemFree|Buffers):/ { sum += $2 }
|
||||
END { print sum }' /proc/meminfo)
|
||||
percpu=$((free / 200 / $(parallel --number-of-cores)))k
|
||||
|
||||
parallel --pipepart -a regexps.txt --block $percpu --compress grep -F -f - -n bigfile |
|
||||
sort -un | perl -pe 's/^\d+://'
|
||||
|
||||
If you can live with duplicated lines and wrong order, it is faster to do:
|
||||
|
||||
parallel --pipepart -a regexps.txt --block $percpu --compress grep -F -f - bigfile
|
||||
|
||||
=head2 Limiting factor: CPU
|
||||
|
||||
If the CPU is the limiting factor parallelization should be done on
|
||||
the regexps:
|
||||
|
||||
cat regexp.txt | parallel --pipe -L1000 --round-robin --compress grep -f - -n bigfile |
|
||||
sort -un | perl -pe 's/^\d+://'
|
||||
|
||||
The command will start one B<grep> per CPU and read I<bigfile> one
|
||||
time per CPU, but as that is done in parallel, all reads except the
|
||||
first will be cached in RAM. Depending on the size of I<regexp.txt> it
|
||||
may be faster to use B<--block 10m> instead of B<-L1000>.
|
||||
|
||||
Some storage systems perform better when reading multiple chunks in
|
||||
parallel. This is true for some RAID systems and for some network file
|
||||
systems. To parallelize the reading of I<bigfile>:
|
||||
|
||||
parallel --pipepart --block 100M -a bigfile -k grep -f regexp.txt
|
||||
parallel --pipepart --block 100M -a bigfile -k --compress grep -f regexp.txt
|
||||
|
||||
This will split I<bigfile> into 100MB chunks and run B<grep> on each of
|
||||
these chunks. To parallelize both reading of I<bigfile> and I<regexp.txt>
|
||||
|
@ -2936,6 +2993,11 @@ combine the two using B<--fifo>:
|
|||
|
||||
If a line matches multiple regexps, the line may be duplicated.
|
||||
|
||||
=head2 Bigger problem
|
||||
|
||||
If the problem is too big to be solved by this, you are probably ready
|
||||
for Lucene.
|
||||
|
||||
|
||||
=head1 EXAMPLE: Using remote computers
|
||||
|
||||
|
|
0
testsuite/Start.sh
Normal file → Executable file
0
testsuite/Start.sh
Normal file → Executable file
|
@ -8,45 +8,23 @@
|
|||
TMP5G=${TMP5G:-/dev/shm}
|
||||
export TMP5G
|
||||
|
||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1
|
||||
echo '### Test of --retries on unreachable host'
|
||||
par_retries_unreachable() {
|
||||
echo '### Test of --retries on unreachable host'
|
||||
seq 2 | stdout parallel -k --retries 2 -v -S 4.3.2.1,: echo
|
||||
}
|
||||
|
||||
echo '**'
|
||||
par_outside_file_handle_limit() {
|
||||
echo "### Test Force outside the file handle limit, 2009-02-17 Gave fork error"
|
||||
(echo echo Start; seq 1 20000 | perl -pe 's/^/true /'; echo echo end) |
|
||||
stdout parallel -uj 0 | egrep -v 'processes took|adjusting'
|
||||
}
|
||||
|
||||
echo "### Test Force outside the file handle limit, 2009-02-17 Gave fork error"
|
||||
(echo echo Start; seq 1 20000 | perl -pe 's/^/true /'; echo echo end) | stdout parallel -uj 0 | egrep -v 'processes took|adjusting'
|
||||
par_over_4GB() {
|
||||
echo '### Test if we can deal with output > 4 GB'
|
||||
echo |
|
||||
nice parallel --tmpdir $TMP5G -q perl -e '$a="x"x1000000;for(0..4300){print $a}' |
|
||||
nice md5sum
|
||||
}
|
||||
|
||||
echo '**'
|
||||
|
||||
echo '### Test if we can deal with output > 4 GB'
|
||||
echo | nice parallel --tmpdir $TMP5G -q perl -e '$a="x"x1000000;for(0..4300){print $a}' | nice md5sum
|
||||
|
||||
echo '**'
|
||||
|
||||
echo 'bug #41613: --compress --line-buffer no --tagstring';
|
||||
diff
|
||||
<(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'|
|
||||
nice parallel -N10 -L1 --pipe -j6 --block 20M --compress
|
||||
pv -qL 1000000 | perl -pe 's/(....).*/$1/')
|
||||
<(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'|
|
||||
nice parallel -N10 -L1 --pipe -j6 --block 20M --compress --line-buffer
|
||||
pv -qL 1000000 | perl -pe 's/(....).*/$1/')
|
||||
>/dev/null
|
||||
|| (echo 'Good: --line-buffer matters'; false) && echo 'Bad: --line-buffer not working'
|
||||
|
||||
echo 'bug #41613: --compress --line-buffer with --tagstring';
|
||||
diff
|
||||
<(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'|
|
||||
nice parallel -N10 -L1 --pipe -j6 --block 20M --compress --tagstring {#}
|
||||
pv -qL 1000000 | perl -pe 's/(....).*/$1/')
|
||||
<(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'|
|
||||
nice parallel -N10 -L1 --pipe -j6 --block 20M --compress --tagstring {#} --line-buffer
|
||||
pv -qL 1000000 | perl -pe 's/(....).*/$1/')
|
||||
>/dev/null
|
||||
|| (echo 'Good: --line-buffer matters'; false) && echo 'Bad: --line-buffer not working'
|
||||
|
||||
echo '**'
|
||||
|
||||
|
||||
EOF
|
||||
export -f $(compgen -A function | grep par_)
|
||||
compgen -A function | grep par_ | sort | parallel -vj0 -k --tag --joblog /tmp/jl-`basename $0` '{} 2>&1'
|
||||
|
|
|
@ -4,27 +4,94 @@
|
|||
# Each should be taking 30-100s and be possible to run in parallel
|
||||
# I.e.: No race conditions, no logins
|
||||
|
||||
# Assume /tmp/shm is easy to fill up
|
||||
export SHM=/tmp/shm/parallel
|
||||
mkdir -p $SHM
|
||||
sudo umount -l $SHM
|
||||
sudo mount -t tmpfs -o size=10% none $SHM
|
||||
par_race_condition1() {
|
||||
echo '### Test race condition on 8 CPU (my laptop)'
|
||||
seq 1 5000000 > /tmp/parallel_race_cond
|
||||
seq 1 10 | parallel -k "cat /tmp/parallel_race_cond | parallel --pipe --recend '' -k gzip >/dev/null; echo {}"
|
||||
rm /tmp/parallel_race_cond
|
||||
}
|
||||
|
||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj4 -k --joblog /tmp/jl-`basename $0` -L1
|
||||
echo '### Test race condition on 8 CPU (my laptop)';
|
||||
seq 1 5000000 > /tmp/parallel_test;
|
||||
seq 1 10 | parallel -k "cat /tmp/parallel_test | parallel --pipe --recend '' -k gzip >/dev/null; echo {}";
|
||||
rm /tmp/parallel_test
|
||||
par_tmp_full() {
|
||||
# Assume /tmp/shm is easy to fill up
|
||||
export SHM=/tmp/shm/parallel
|
||||
mkdir -p $SHM
|
||||
sudo umount -l $SHM
|
||||
sudo mount -t tmpfs -o size=10% none $SHM
|
||||
|
||||
echo '**'
|
||||
echo "### Test --tmpdir running full. bug #40733 was caused by this"
|
||||
stdout parallel -j1 --tmpdir $SHM cat /dev/zero ::: dummy
|
||||
}
|
||||
|
||||
echo "### Test --tmpdir running full. bug #40733 was caused by this"
|
||||
stdout parallel -j1 --tmpdir $SHM cat /dev/zero ::: dummy
|
||||
par_bug_48290() {
|
||||
echo "### bug #48290: round-robin does not distribute data based on business"
|
||||
echo "Jobslot 1 is 256 times slower than jobslot 4 and should get much less data"
|
||||
yes "$(seq 1000|xargs)" | head -c 30M |
|
||||
parallel --tagstring {%} --linebuffer --compress -j4 --roundrobin --pipe --block 10k \
|
||||
pv -qL '{= $_=int( $job->slot()**4/2+1) =}'0000 |
|
||||
perl -ne '/^\d+/ and $s{$&}++; END { print map { "$_\n" } sort { $s{$b} <=> $s{$a} } keys %s}'
|
||||
}
|
||||
|
||||
echo '**'
|
||||
par_memory_leak() {
|
||||
a_run() {
|
||||
seq $1 |time -v parallel true 2>&1 |
|
||||
grep 'Maximum resident' |
|
||||
field 6;
|
||||
}
|
||||
export -f a_run
|
||||
echo "### Test for memory leaks"
|
||||
echo "Of 10 runs of 1 job at least one should be bigger than a 3000 job run"
|
||||
small_max=$(seq 10 | parallel a_run 1 | jq -s max)
|
||||
big=$(a_run 3000)
|
||||
if [ $small_max -lt $big ] ; then
|
||||
echo "Bad: Memleak likely."
|
||||
else
|
||||
echo "Good: No memleak detected."
|
||||
fi
|
||||
}
|
||||
|
||||
echo "### bug #48290: round-robin does not distribute data based on business"
|
||||
echo "Jobslot 1 is 8 times slower than jobslot 8 and should get much less data"
|
||||
seq 10000000 | parallel --tagstring {%} --linebuffer --compress -j8 --roundrobin --pipe --block 300k 'pv -qL {%}00000'| perl -ne '/^\d+/ and $s{$&}++; END { print map { "$_\n" } sort { $s{$a} <=> $s{$b} } keys %s}'
|
||||
par_linebuffer_matters_compress_tag() {
|
||||
echo "### (--linebuffer) --compress --tag should give different output"
|
||||
random_data_with_id_prepended() {
|
||||
perl -pe 's/^/'$1'/' /dev/urandom |
|
||||
pv -qL 300000 | head -c 1000000
|
||||
}
|
||||
export -f random_data_with_id_prepended
|
||||
|
||||
EOF
|
||||
nolb=$(seq 10 |
|
||||
parallel -j0 --compress --tag random_data_with_id_prepended {#} |
|
||||
field 1 | uniq)
|
||||
lb=$(seq 10 |
|
||||
parallel -j0 --linebuffer --compress --tag random_data_with_id_prepended {#} |
|
||||
field 1 | uniq)
|
||||
if [ "$lb" == "$nolb" ] ; then
|
||||
echo "BAD: --linebuffer makes no difference"
|
||||
else
|
||||
echo "OK: --linebuffer makes a difference"
|
||||
fi
|
||||
}
|
||||
|
||||
par_linebuffer_matters_compress() {
|
||||
echo "### (--linebuffer) --compress --tag should give different output"
|
||||
random_data_with_id_prepended() {
|
||||
perl -pe 's/^/'$1'/' /dev/urandom |
|
||||
pv -qL 300000 | head -c 1000000
|
||||
}
|
||||
export -f random_data_with_id_prepended
|
||||
|
||||
nolb=$(seq 10 |
|
||||
parallel -j0 --compress random_data_with_id_prepended {#} |
|
||||
field 1 | uniq)
|
||||
lb=$(seq 10 |
|
||||
parallel -j0 --linebuffer --compress random_data_with_id_prepended {#} |
|
||||
field 1 | uniq)
|
||||
if [ "$lb" == "$nolb" ] ; then
|
||||
echo "BAD: --linebuffer makes no difference"
|
||||
else
|
||||
echo "OK: --linebuffer makes a difference"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
|
||||
export -f $(compgen -A function | grep par_)
|
||||
compgen -A function | grep par_ | sort | parallel -j6 --tag -k '{} 2>&1'
|
||||
|
|
126
testsuite/tests-to-run/parallel-local-sql.sh
Normal file → Executable file
126
testsuite/tests-to-run/parallel-local-sql.sh
Normal file → Executable file
|
@ -1,75 +1,75 @@
|
|||
#!/bin/bash
|
||||
|
||||
export SQLITE=sqlite3:///%2Frun%2Fshm%2Fparallel.db
|
||||
export SQLITETBL=$SQLITE/parsql
|
||||
export PG=pg://tange:tange@lo/tange
|
||||
export PGTBL=$PG/parsql
|
||||
export MYSQL=mysql://`whoami`:`whoami`@lo/tange
|
||||
export MYSQLTBL=$MYSQL/parsql
|
||||
export PGTBL2=${PGTBL}2
|
||||
export PGTBL3=${PGTBL}3
|
||||
export PGTBL4=${PGTBL}4
|
||||
export PGTBL5=${PGTBL}5
|
||||
export T1=$(tempfile)
|
||||
export T2=$(tempfile)
|
||||
export T3=$(tempfile)
|
||||
export T4=$(tempfile)
|
||||
export T5=$(tempfile)
|
||||
export T6=$(tempfile)
|
||||
export T7=$(tempfile)
|
||||
export T8=$(tempfile)
|
||||
export T9=$(tempfile)
|
||||
export T10=$(tempfile)
|
||||
export T11=$(tempfile)
|
||||
export T12=$(tempfile)
|
||||
export T13=$(tempfile)
|
||||
export T14=$(tempfile)
|
||||
export PG=pg://`whoami`:`whoami`@lo/`whoami`
|
||||
export MYSQL=mysql://`whoami`:`whoami`@lo/`whoami`
|
||||
|
||||
#sql mysql://tange:tange@lo/ 'create database tange;';
|
||||
cat <<'EOF' | sed -e 's/;$/; /;' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 | perl -pe 's/\s*\d+\.?\d+\s*/999/g;s/999e+999.\s+.\s+/999e+999|999/g;'
|
||||
echo '### --sqlandworker mysql'
|
||||
(sleep 2; parallel --sqlworker $MYSQLTBL sleep .3\;echo >$T1) &
|
||||
parallel --sqlandworker $MYSQLTBL sleep .3\;echo ::: {1..5} ::: {a..e} >$T2;
|
||||
true sort -u $T1 $T2;
|
||||
sleep 1; sql $MYSQL 'select * from parsql order by seq;'
|
||||
export DEBUG=false
|
||||
|
||||
echo '### --sqlandworker postgresql'
|
||||
(sleep 2; parallel --sqlworker $PGTBL sleep .3\;echo >$T3) &
|
||||
parallel --sqlandworker $PGTBL sleep .3\;echo ::: {1..5} ::: {a..e} >$T4;
|
||||
true sort -u $T3 $T4;
|
||||
sleep 1; sql $PG 'select * from parsql order by seq;'
|
||||
p_showsqlresult() {
|
||||
SERVERURL=$1
|
||||
TABLE=$2
|
||||
sql $SERVERURL "select Host,Command,V1,V2,Stdout,Stderr from $TABLE order by seq;"
|
||||
}
|
||||
|
||||
echo '### --sqlandworker sqlite'
|
||||
(sleep 2; parallel --sqlworker $SQLITETBL sleep .3\;echo >$T5) &
|
||||
parallel --sqlandworker $SQLITETBL sleep .3\;echo ::: {1..5} ::: {a..e} >$T6;
|
||||
true sort -u $T5 $T6;
|
||||
sleep 1; sql $SQLITE 'select * from parsql order by seq;'
|
||||
p_wrapper() {
|
||||
INNER=$1
|
||||
SERVERURL=$(eval echo $2)
|
||||
TABLE=TBL$RANDOM
|
||||
DBURL=$SERVERURL/$TABLE
|
||||
T1=$(tempfile)
|
||||
T2=$(tempfile)
|
||||
eval "$INNER"
|
||||
echo Exit=$?
|
||||
wait
|
||||
echo Exit=$?
|
||||
$DEBUG && sort -u $T1 $T2;
|
||||
rm $T1 $T2
|
||||
p_showsqlresult $SERVERURL $TABLE
|
||||
$DEBUG || sql $SERVERURL "drop table $TABLE;" >/dev/null
|
||||
}
|
||||
|
||||
echo '### --sqlandworker postgresql -S lo'
|
||||
(sleep 2; parallel -S lo --sqlworker $PGTBL2 sleep .3\;echo >$T7) &
|
||||
parallel -S lo --sqlandworker $PGTBL2 sleep .3\;echo ::: {1..5} ::: {a..e} >$T8;
|
||||
true sort -u $T7 $T8;
|
||||
sleep 1; sql $PG 'select * from parsql2 order by seq;'
|
||||
p_template() {
|
||||
(sleep 2; parallel "$@" --sqlworker $DBURL sleep .3\;echo >$T1) &
|
||||
parallel "$@" --sqlandworker $DBURL sleep .3\;echo ::: {1..5} ::: {a..e} >$T2;
|
||||
}
|
||||
export -f p_template
|
||||
|
||||
echo '### --sqlandworker postgresql --results'
|
||||
mkdir -p /tmp/out--sql
|
||||
(sleep 2; parallel --results /tmp/out--sql --sqlworker $PGTBL3 sleep .3\;echo >$T9) &
|
||||
parallel --results /tmp/out--sql --sqlandworker $PGTBL3 sleep .3\;echo ::: {1..5} ::: {a..e} >$T10;
|
||||
true sort -u $T9 $T10;
|
||||
sleep 1; sql $PG 'select * from parsql3 order by seq;'
|
||||
par_sqlandworker() {
|
||||
p_template
|
||||
}
|
||||
|
||||
echo '### --sqlandworker postgresql --linebuffer'
|
||||
(sleep 2; parallel --linebuffer --sqlworker $PGTBL4 sleep .3\;echo >$T11) &
|
||||
parallel --linebuffer --sqlandworker $PGTBL4 sleep .3\;echo ::: {1..5} ::: {a..e} >$T12;
|
||||
true sort -u $T11 $T12;
|
||||
sleep 1; sql $PG 'select * from parsql4 order by seq;'
|
||||
par_sqlandworker_lo() {
|
||||
p_template -S lo
|
||||
}
|
||||
|
||||
echo '### --sqlandworker postgresql -u'
|
||||
(sleep 2; parallel -u --sqlworker $PGTBL5 sleep .3\;echo >$T13) &
|
||||
parallel -u --sqlandworker $PGTBL5 sleep .3\;echo ::: {1..5} ::: {a..e} >$T14;
|
||||
true sort -u $T13 $T14;
|
||||
sleep 1; sql $PG 'select * from parsql5 order by seq;'
|
||||
par_sqlandworker_results() {
|
||||
p_template --results /tmp/out--sql
|
||||
}
|
||||
|
||||
EOF
|
||||
par_sqlandworker_linebuffer() {
|
||||
p_template --linebuffer
|
||||
}
|
||||
|
||||
eval rm '$T'{1..14}
|
||||
par_sqlandworker_tag() {
|
||||
p_template --tag
|
||||
}
|
||||
|
||||
par_sqlandworker_linebuffer_tag() {
|
||||
p_template --linebuffer --tag
|
||||
}
|
||||
|
||||
par_sqlandworker_compress_linebuffer_tag() {
|
||||
p_template --compress --linebuffer --tag
|
||||
}
|
||||
|
||||
par_sqlandworker_unbuffer() {
|
||||
p_template -u
|
||||
}
|
||||
|
||||
|
||||
export -f $(compgen -A function | egrep 'p_|par_')
|
||||
# Tested that -j0 in parallel is fastest (up to 15 jobs)
|
||||
compgen -A function | grep par_ | sort |
|
||||
stdout parallel -vj5 -k --tag --joblog /tmp/jl-`basename $0` p_wrapper \
|
||||
:::: - ::: \$MYSQL \$PG \$SQLITE
|
||||
|
|
|
@ -1,80 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
# TODO ksh fish
|
||||
|
||||
unset run_test
|
||||
|
||||
# SSH only allowed to localhost/lo
|
||||
# --retries if ssh dies
|
||||
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj4 --retries 2 -k --joblog /tmp/jl-`basename $0` -L1
|
||||
echo '### --env from man env_parallel'
|
||||
echo '### bash'
|
||||
ssh bash@lo '
|
||||
alias myecho="echo aliases";
|
||||
env_parallel myecho ::: work;
|
||||
env_parallel -S server myecho ::: work;
|
||||
env_parallel --env myecho myecho ::: work;
|
||||
env_parallel --env myecho -S server myecho ::: work
|
||||
'
|
||||
|
||||
ssh bash@lo '
|
||||
myfunc() { echo functions $*; };
|
||||
env_parallel myfunc ::: work;
|
||||
env_parallel -S server myfunc ::: work;
|
||||
env_parallel --env myfunc myfunc ::: work;
|
||||
env_parallel --env myfunc -S server myfunc ::: work
|
||||
'
|
||||
|
||||
ssh bash@lo '
|
||||
myvar=variables;
|
||||
env_parallel echo "\$myvar" ::: work;
|
||||
env_parallel -S server echo "\$myvar" ::: work;
|
||||
env_parallel --env myvar echo "\$myvar" ::: work;
|
||||
env_parallel --env myvar -S server echo "\$myvar" ::: work
|
||||
'
|
||||
|
||||
ssh bash@lo '
|
||||
myarray=(arrays work, too);
|
||||
env_parallel -k echo "\${myarray[{}]}" ::: 0 1 2;
|
||||
env_parallel -k -S server echo "\${myarray[{}]}" ::: 0 1 2;
|
||||
env_parallel -k --env myarray echo "\${myarray[{}]}" ::: 0 1 2;
|
||||
env_parallel -k --env myarray -S server echo "\${myarray[{}]}" ::: 0 1 2
|
||||
'
|
||||
|
||||
echo '### zsh'
|
||||
|
||||
ssh zsh@lo '
|
||||
alias myecho="echo aliases";
|
||||
env_parallel myecho ::: work;
|
||||
env_parallel -S server myecho ::: work;
|
||||
env_parallel --env myecho myecho ::: work;
|
||||
env_parallel --env myecho -S server myecho ::: work
|
||||
'
|
||||
|
||||
ssh zsh@lo '
|
||||
myfunc() { echo functions $*; };
|
||||
env_parallel myfunc ::: work;
|
||||
env_parallel -S server myfunc ::: work;
|
||||
env_parallel --env myfunc myfunc ::: work;
|
||||
env_parallel --env myfunc -S server myfunc ::: work
|
||||
'
|
||||
|
||||
ssh zsh@lo '
|
||||
myvar=variables;
|
||||
env_parallel echo "\$myvar" ::: work;
|
||||
env_parallel -S server echo "\$myvar" ::: work;
|
||||
env_parallel --env myvar echo "\$myvar" ::: work;
|
||||
env_parallel --env myvar -S server echo "\$myvar" ::: work
|
||||
'
|
||||
|
||||
ssh zsh@lo '
|
||||
myarray=(arrays work, too);
|
||||
env_parallel -k echo "\${myarray[{}]}" ::: 1 2 3;
|
||||
env_parallel -k -S server echo "\${myarray[{}]}" ::: 1 2 3;
|
||||
env_parallel -k --env myarray echo "\${myarray[{}]}" ::: 1 2 3;
|
||||
env_parallel -k --env myarray -S server echo "\${myarray[{}]}" ::: 1 2 3
|
||||
'
|
||||
|
||||
echo '### --env _'
|
||||
fUbAr="OK FUBAR" parallel -S parallel@lo --env _ echo '$fUbAr $DEBEMAIL' ::: test
|
||||
fUbAr="OK FUBAR" parallel -S csh@lo --env _ echo '$fUbAr $DEBEMAIL' ::: test
|
||||
|
@ -87,13 +17,6 @@ echo 'bug #40137: SHELL not bash: Warning when exporting funcs'
|
|||
. <(printf 'myfunc() {\necho $1\n}'); export -f myfunc; parallel --env myfunc -S lo myfunc ::: no_warning
|
||||
. <(printf 'myfunc() {\necho $1\n}'); export -f myfunc; SHELL=/bin/sh parallel --env myfunc -S lo myfunc ::: warning
|
||||
|
||||
echo 'env_parallel from man page - transfer non-exported var'
|
||||
source $(which env_parallel.bash);
|
||||
var=nonexported env_parallel -S parallel@lo echo '$var' ::: variable
|
||||
|
||||
echo 'compared to parallel - no transfer non-exported var'
|
||||
var=nonexported parallel -S parallel@lo echo '$var' ::: variable
|
||||
|
||||
echo '### zsh'
|
||||
|
||||
echo 'env in zsh'
|
||||
|
@ -189,161 +112,3 @@ echo '### bug #45575: -m and multiple hosts repeats first args'
|
|||
seq 1 3 | parallel -X -S 2/lo,2/: -k echo
|
||||
|
||||
EOF
|
||||
|
||||
echo
|
||||
echo Test env_parallel:
|
||||
echo + for each shell
|
||||
echo + remote, locally
|
||||
echo + variables, variables with funky content, arrays, assoc array, functions, aliases
|
||||
echo
|
||||
echo "### Bash environment"
|
||||
#stdout ssh -t lo <<'EOS'
|
||||
myvar="myvar works"
|
||||
funky=$(perl -e 'print pack "c*", 1..255')
|
||||
myarray=('' array_val2 3 '' 5 ' space 6 ')
|
||||
declare -A assocarr
|
||||
assocarr[a]=assoc_val_a
|
||||
assocarr[b]=assoc_val_b
|
||||
alias alias_echo="echo 3 arg";
|
||||
func_echo() {
|
||||
echo $*;
|
||||
echo "$myvar"
|
||||
echo "${myarray[5]}"
|
||||
echo ${assocarr[a]}
|
||||
echo Funky-"$funky"-funky
|
||||
}
|
||||
. `which env_parallel.bash`
|
||||
env_parallel alias_echo ::: alias_works
|
||||
env_parallel func_echo ::: function_works
|
||||
env_parallel -S lo alias_echo ::: alias_works_over_ssh
|
||||
env_parallel -S lo func_echo ::: function_works_over_ssh
|
||||
echo
|
||||
echo "$funky" | parallel --shellquote
|
||||
#EOS
|
||||
|
||||
|
||||
echo
|
||||
echo "### Zsh environment"
|
||||
stdout ssh -q zsh@lo <<'EOS' | egrep -v 'Welcome to |packages can be updated|security updates'
|
||||
myvar="myvar works"
|
||||
funky=$(perl -e 'print pack "c*", 1..255')
|
||||
myarray=('' array_val2 3 '' 5 ' space 6 ')
|
||||
declare -A assocarr
|
||||
assocarr[a]=assoc_val_a
|
||||
assocarr[b]=assoc_val_b
|
||||
alias alias_echo="echo 3 arg";
|
||||
func_echo() {
|
||||
echo $*;
|
||||
echo "$myvar"
|
||||
echo "$myarray[6]"
|
||||
echo ${assocarr[a]}
|
||||
echo Funky-"$funky"-funky
|
||||
}
|
||||
|
||||
env_parallel alias_echo ::: alias_works
|
||||
env_parallel func_echo ::: function_works
|
||||
env_parallel -S zsh@lo alias_echo ::: alias_works_over_ssh
|
||||
env_parallel -S zsh@lo func_echo ::: function_works_over_ssh
|
||||
echo
|
||||
echo "$funky" | parallel --shellquote
|
||||
EOS
|
||||
|
||||
echo
|
||||
echo "### Ksh environment"
|
||||
stdout ssh -q ksh@lo <<'EOS' | egrep -v 'Welcome to |packages can be updated|security updates'
|
||||
myvar="myvar works"
|
||||
funky=$(perl -e 'print pack "c*", 1..255')
|
||||
myarray=('' array_val2 3 '' 5 ' space 6 ')
|
||||
typeset -A assocarr
|
||||
assocarr[a]=assoc_val_a
|
||||
assocarr[b]=assoc_val_b
|
||||
alias alias_echo="echo 3 arg";
|
||||
|
||||
func_echo() {
|
||||
echo $*;
|
||||
echo "$myvar"
|
||||
echo "${myarray[5]}"
|
||||
echo ${assocarr[a]}
|
||||
echo Funky-"$funky"-funky
|
||||
}
|
||||
|
||||
env_parallel alias_echo ::: alias_works
|
||||
env_parallel func_echo ::: function_works
|
||||
env_parallel -S ksh@lo alias_echo ::: alias_works_over_ssh
|
||||
env_parallel -S ksh@lo func_echo ::: function_works_over_ssh
|
||||
echo
|
||||
echo "$funky" | parallel --shellquote
|
||||
EOS
|
||||
|
||||
echo
|
||||
echo "### Fish environment"
|
||||
stdout ssh -q fish@lo <<'EOS' | egrep -v 'Welcome to |packages can be updated|security updates'
|
||||
set myvar "myvar works"
|
||||
setenv myenvvar "myenvvar works"
|
||||
|
||||
set funky (perl -e 'print pack "c*", 1..255')
|
||||
setenv funkyenv (perl -e 'print pack "c*", 1..255')
|
||||
|
||||
set myarray '' array_val2 3 '' 5 ' space 6 '
|
||||
|
||||
# Assoc arrays do not exist
|
||||
#typeset -A assocarr
|
||||
#assocarr[a]=assoc_val_a
|
||||
#assocarr[b]=assoc_val_b
|
||||
alias alias_echo="echo 3 arg";
|
||||
|
||||
function func_echo
|
||||
echo $argv;
|
||||
echo "$myvar"
|
||||
echo "$myenvvar"
|
||||
echo "$myarray[6]"
|
||||
# Assoc arrays do not exist in fish
|
||||
# echo ${assocarr[a]}
|
||||
echo
|
||||
echo
|
||||
echo
|
||||
echo Funky-"$funky"-funky
|
||||
echo Funkyenv-"$funkyenv"-funkyenv
|
||||
echo
|
||||
echo
|
||||
echo
|
||||
end
|
||||
|
||||
env_parallel alias_echo ::: alias_works
|
||||
env_parallel func_echo ::: function_works
|
||||
env_parallel -S fish@lo alias_echo ::: alias_works_over_ssh
|
||||
env_parallel -S fish@lo func_echo ::: function_works_over_ssh
|
||||
echo
|
||||
echo "$funky" | parallel --shellquote
|
||||
EOS
|
||||
|
||||
echo
|
||||
echo "### csh environment"
|
||||
stdout ssh -q csh@lo <<'EOS' | egrep -v 'Welcome to |packages can be updated|security updates'
|
||||
set myvar = "myvar works"
|
||||
set funky = "`perl -e 'print pack q(c*), 2..255'`"
|
||||
set myarray = ('' 'array_val2' '3' '' '5' ' space 6 ')
|
||||
#declare -A assocarr
|
||||
#assocarr[a]=assoc_val_a
|
||||
#assocarr[b]=assoc_val_b
|
||||
alias alias_echo echo 3 arg;
|
||||
alias alias_echo_var 'echo $argv; echo "$myvar"; echo "${myarray[4]} special chars problem"; echo Funky-"$funky"-funky'
|
||||
|
||||
#function func_echo
|
||||
# echo $argv;
|
||||
# echo $myvar;
|
||||
# echo ${myarray[2]}
|
||||
# #echo ${assocarr[a]}
|
||||
# echo Funky-"$funky"-funky
|
||||
#end
|
||||
|
||||
env_parallel alias_echo ::: alias_works
|
||||
env_parallel alias_echo_var ::: alias_var_works
|
||||
env_parallel func_echo ::: function_does_not_work
|
||||
env_parallel -S csh@lo alias_echo ::: alias_works_over_ssh
|
||||
env_parallel -S csh@lo alias_echo_var ::: alias_var_works_over_ssh
|
||||
env_parallel -S csh@lo func_echo ::: function_does_not_work_over_ssh
|
||||
echo
|
||||
echo "$funky" | parallel --shellquote
|
||||
EOS
|
||||
|
||||
|
|
746
testsuite/tests-to-run/parallel-local-ssh7.sh
Executable file
746
testsuite/tests-to-run/parallel-local-ssh7.sh
Executable file
|
@ -0,0 +1,746 @@
|
|||
#!/bin/bash
|
||||
|
||||
echo '### test --env _'
|
||||
echo 'Both test that variables are copied,'
|
||||
echo 'but also that they are NOT copied, if ignored'
|
||||
|
||||
par_bash_man() {
|
||||
echo '### bash'
|
||||
|
||||
myscript=$(cat <<'_EOF'
|
||||
echo "### From man env_parallel"
|
||||
|
||||
alias myecho="echo aliases";
|
||||
env_parallel myecho ::: work;
|
||||
env_parallel -S server myecho ::: work;
|
||||
env_parallel --env myecho myecho ::: work;
|
||||
env_parallel --env myecho -S server myecho ::: work
|
||||
|
||||
myfunc() { echo functions $*; };
|
||||
env_parallel myfunc ::: work;
|
||||
env_parallel -S server myfunc ::: work;
|
||||
env_parallel --env myfunc myfunc ::: work;
|
||||
env_parallel --env myfunc -S server myfunc ::: work
|
||||
|
||||
myvar=variables;
|
||||
env_parallel echo "\$myvar" ::: work;
|
||||
env_parallel -S server echo "\$myvar" ::: work;
|
||||
env_parallel --env myvar echo "\$myvar" ::: work;
|
||||
env_parallel --env myvar -S server echo "\$myvar" ::: work
|
||||
|
||||
myarray=(arrays work, too);
|
||||
env_parallel -k echo "\${myarray[{}]}" ::: 0 1 2;
|
||||
env_parallel -k -S server echo "\${myarray[{}]}" ::: 0 1 2;
|
||||
env_parallel -k --env myarray echo "\${myarray[{}]}" ::: 0 1 2;
|
||||
env_parallel -k --env myarray -S server echo "\${myarray[{}]}" ::: 0 1 2
|
||||
_EOF
|
||||
)
|
||||
ssh bash@lo "$myscript"
|
||||
}
|
||||
|
||||
par_zsh_man() {
|
||||
echo '### zsh'
|
||||
myscript=$(cat <<'_EOF'
|
||||
echo "### From man env_parallel"
|
||||
|
||||
alias myecho="echo aliases";
|
||||
env_parallel myecho ::: work;
|
||||
env_parallel -S server myecho ::: work;
|
||||
env_parallel --env myecho myecho ::: work;
|
||||
env_parallel --env myecho -S server myecho ::: work
|
||||
|
||||
myfunc() { echo functions $*; };
|
||||
env_parallel myfunc ::: work;
|
||||
env_parallel -S server myfunc ::: work;
|
||||
env_parallel --env myfunc myfunc ::: work;
|
||||
env_parallel --env myfunc -S server myfunc ::: work
|
||||
|
||||
myvar=variables;
|
||||
env_parallel echo "\$myvar" ::: work;
|
||||
env_parallel -S server echo "\$myvar" ::: work;
|
||||
env_parallel --env myvar echo "\$myvar" ::: work;
|
||||
env_parallel --env myvar -S server echo "\$myvar" ::: work
|
||||
|
||||
myarray=(arrays work, too);
|
||||
env_parallel -k echo "\${myarray[{}]}" ::: 1 2 3;
|
||||
env_parallel -k -S server echo "\${myarray[{}]}" ::: 1 2 3;
|
||||
env_parallel -k --env myarray echo "\${myarray[{}]}" ::: 1 2 3;
|
||||
env_parallel -k --env myarray -S server echo "\${myarray[{}]}" ::: 1 2 3
|
||||
_EOF
|
||||
)
|
||||
ssh zsh@lo "$myscript"
|
||||
}
|
||||
|
||||
par_ksh_man() {
|
||||
echo '### ksh'
|
||||
myscript=$(cat <<'_EOF'
|
||||
echo "### From man env_parallel"
|
||||
|
||||
. `which env_parallel.ksh`;
|
||||
alias myecho="echo aliases";
|
||||
env_parallel myecho ::: work;
|
||||
env_parallel -S server myecho ::: work;
|
||||
env_parallel --env myecho myecho ::: work;
|
||||
env_parallel --env myecho -S server myecho ::: work
|
||||
|
||||
. `which env_parallel.ksh`;
|
||||
myfunc() { echo functions $*; };
|
||||
env_parallel myfunc ::: work;
|
||||
env_parallel -S server myfunc ::: work;
|
||||
env_parallel --env myfunc myfunc ::: work;
|
||||
env_parallel --env myfunc -S server myfunc ::: work
|
||||
|
||||
. `which env_parallel.ksh`;
|
||||
myvar=variables;
|
||||
env_parallel echo "\$myvar" ::: work;
|
||||
env_parallel -S server echo "\$myvar" ::: work;
|
||||
env_parallel --env myvar echo "\$myvar" ::: work;
|
||||
env_parallel --env myvar -S server echo "\$myvar" ::: work
|
||||
|
||||
. `which env_parallel.ksh`;
|
||||
myarray=(arrays work, too);
|
||||
env_parallel -k echo "\${myarray[{}]}" ::: 0 1 2;
|
||||
env_parallel -k -S server echo "\${myarray[{}]}" ::: 0 1 2;
|
||||
env_parallel -k --env myarray echo "\${myarray[{}]}" ::: 0 1 2;
|
||||
env_parallel -k --env myarray -S server echo "\${myarray[{}]}" ::: 0 1 2
|
||||
_EOF
|
||||
)
|
||||
ssh ksh@lo "$myscript"
|
||||
}
|
||||
|
||||
par_pdksh_man() {
|
||||
echo '### pdksh'
|
||||
myscript=$(cat <<'_EOF'
|
||||
echo "### From man env_parallel"
|
||||
|
||||
. `which env_parallel.pdksh`;
|
||||
alias myecho="echo aliases";
|
||||
env_parallel myecho ::: work;
|
||||
env_parallel -S server myecho ::: work;
|
||||
env_parallel --env myecho myecho ::: work;
|
||||
env_parallel --env myecho -S server myecho ::: work
|
||||
|
||||
. `which env_parallel.pdksh`;
|
||||
myfunc() { echo functions $*; };
|
||||
env_parallel myfunc ::: work;
|
||||
env_parallel -S server myfunc ::: work;
|
||||
env_parallel --env myfunc myfunc ::: work;
|
||||
env_parallel --env myfunc -S server myfunc ::: work
|
||||
|
||||
. `which env_parallel.pdksh`;
|
||||
myvar=variables;
|
||||
env_parallel echo "\$myvar" ::: work;
|
||||
env_parallel -S server echo "\$myvar" ::: work;
|
||||
env_parallel --env myvar echo "\$myvar" ::: work;
|
||||
env_parallel --env myvar -S server echo "\$myvar" ::: work
|
||||
|
||||
. `which env_parallel.pdksh`;
|
||||
myarray=(arrays work, too);
|
||||
env_parallel -k echo "\${myarray[{}]}" ::: 0 1 2;
|
||||
env_parallel -k -S server echo "\${myarray[{}]}" ::: 0 1 2;
|
||||
env_parallel -k --env myarray echo "\${myarray[{}]}" ::: 0 1 2;
|
||||
env_parallel -k --env myarray -S server echo "\${myarray[{}]}" ::: 0 1 2
|
||||
_EOF
|
||||
)
|
||||
ssh pdksh@lo "$myscript"
|
||||
}
|
||||
|
||||
par_tcsh_man() {
|
||||
echo '### tcsh'
|
||||
myscript=$(cat <<'_EOF'
|
||||
echo "### From man env_parallel"
|
||||
|
||||
alias myecho 'echo aliases'
|
||||
env_parallel myecho ::: work
|
||||
env_parallel -S server myecho ::: work
|
||||
env_parallel --env myecho myecho ::: work
|
||||
env_parallel --env myecho -S server myecho ::: work
|
||||
|
||||
echo Functions not supported
|
||||
|
||||
set myvar=variables
|
||||
env_parallel echo '$myvar' ::: work
|
||||
env_parallel -S server echo '$myvar' ::: work
|
||||
env_parallel --env myvar echo '$myvar' ::: work
|
||||
env_parallel --env myvar -S server echo '$myvar' ::: work
|
||||
|
||||
set myarray=(arrays work, too)
|
||||
env_parallel -k echo \$'{myarray[{}]}' ::: 1 2 3
|
||||
env_parallel -k -S server echo \$'{myarray[{}]}' ::: 1 2 3
|
||||
env_parallel -k --env myarray echo \$'{myarray[{}]}' ::: 1 2 3
|
||||
env_parallel -k --env myarray -S server echo \$'{myarray[{}]}' ::: 1 2 3
|
||||
|
||||
_EOF
|
||||
)
|
||||
ssh -tt tcsh@lo "$myscript"
|
||||
}
|
||||
|
||||
par_csh_man() {
|
||||
echo '### csh'
|
||||
myscript=$(cat <<'_EOF'
|
||||
echo "### From man env_parallel"
|
||||
|
||||
# source `which env_parallel.csh`;
|
||||
|
||||
alias myecho 'echo aliases'
|
||||
env_parallel myecho ::: work
|
||||
env_parallel -S server myecho ::: work
|
||||
env_parallel --env myecho myecho ::: work
|
||||
env_parallel --env myecho -S server myecho ::: work
|
||||
|
||||
# Functions not supported
|
||||
|
||||
set myvar=variables
|
||||
env_parallel echo '$myvar' ::: work
|
||||
env_parallel -S server echo '$myvar' ::: work
|
||||
env_parallel --env myvar echo '$myvar' ::: work
|
||||
env_parallel --env myvar -S server echo '$myvar' ::: work
|
||||
|
||||
set myarray=(arrays work, too)
|
||||
env_parallel -k echo \$'{myarray[{}]}' ::: 1 2 3
|
||||
env_parallel -k -S server echo \$'{myarray[{}]}' ::: 1 2 3
|
||||
env_parallel -k --env myarray echo \$'{myarray[{}]}' ::: 1 2 3
|
||||
env_parallel -k --env myarray -S server echo \$'{myarray[{}]}' ::: 1 2 3
|
||||
|
||||
_EOF
|
||||
)
|
||||
ssh csh@lo "$myscript"
|
||||
}
|
||||
|
||||
par_fish_man() {
|
||||
echo '### fish'
|
||||
myscript=$(cat <<'_EOF'
|
||||
echo "### From man env_parallel"
|
||||
|
||||
alias myecho 'echo aliases'
|
||||
env_parallel myecho ::: work
|
||||
env_parallel -S server myecho ::: work
|
||||
env_parallel --env myecho myecho ::: work
|
||||
env_parallel --env myecho -S server myecho ::: work
|
||||
|
||||
function myfunc
|
||||
echo functions $argv
|
||||
end
|
||||
env_parallel myfunc ::: work
|
||||
env_parallel -S server myfunc ::: work
|
||||
env_parallel --env myfunc myfunc ::: work
|
||||
env_parallel --env myfunc -S server myfunc ::: work
|
||||
|
||||
set myvar variables
|
||||
env_parallel echo '$myvar' ::: work
|
||||
env_parallel -S server echo '$myvar' ::: work
|
||||
env_parallel --env myvar echo '$myvar' ::: work
|
||||
env_parallel --env myvar -S server echo '$myvar' ::: work
|
||||
|
||||
set myarray arrays work, too
|
||||
env_parallel -k echo '$myarray[{}]' ::: 1 2 3
|
||||
env_parallel -k -S server echo '$myarray[{}]' ::: 1 2 3
|
||||
env_parallel -k --env myarray echo '$myarray[{}]' ::: 1 2 3
|
||||
env_parallel -k --env myarray -S server echo '$myarray[{}]' ::: 1 2 3
|
||||
|
||||
_EOF
|
||||
)
|
||||
ssh fish@lo "$myscript"
|
||||
}
|
||||
|
||||
|
||||
par_bash_underscore() {
|
||||
echo '### bash'
|
||||
myscript=$(cat <<'_EOF'
|
||||
echo "### Testing of --env _"
|
||||
|
||||
env_parallel --record-env;
|
||||
alias myecho="echo \$myvar aliases in";
|
||||
myfunc() { myecho ${myarray[@]} functions $*; };
|
||||
myvar="variables in";
|
||||
myarray=(and arrays in);
|
||||
env_parallel myfunc ::: work;
|
||||
env_parallel -S server myfunc ::: work;
|
||||
env_parallel --env myfunc,myvar,myarray,myecho myfunc ::: work;
|
||||
env_parallel --env myfunc,myvar,myarray,myecho -S server myfunc ::: work;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
|
||||
echo myvar >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
echo myarray >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
echo myecho >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
echo "OK if no myecho ^^^^^^^^^^^^^^^^^^^^^^^^^" >&2;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
echo "OK if no myecho ^^^^^^^^^^^^^^^^^^^^^^^^^" >&2;
|
||||
echo myfunc >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
echo "OK if no myfunc ^^^^^^^^^^^^^^^^^^^^^^^^^" >&2;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
echo "OK if no myfunc ^^^^^^^^^^^^^^^^^^^^^^^^^" >&2;
|
||||
_EOF
|
||||
)
|
||||
ssh bash@lo "$myscript"
|
||||
}
|
||||
|
||||
par_zsh_underscore() {
|
||||
echo '### zsh'
|
||||
myscript=$(cat <<'_EOF'
|
||||
echo "### Testing of --env _"
|
||||
|
||||
. `which env_parallel.zsh`;
|
||||
env_parallel --record-env;
|
||||
alias myecho="echo \$myvar aliases in";
|
||||
eval `cat <<"_EOS";
|
||||
myfunc() { myecho ${myarray[@]} functions $*; };
|
||||
myvar="variables in";
|
||||
myarray=(and arrays in);
|
||||
env_parallel myfunc ::: work;
|
||||
env_parallel -S server myfunc ::: work;
|
||||
env_parallel --env myfunc,myvar,myarray,myecho myfunc ::: work;
|
||||
env_parallel --env myfunc,myvar,myarray,myecho -S server myfunc ::: work;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
|
||||
echo myvar >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
echo myarray >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
echo myecho >> ~/.parallel/ignored_vars;
|
||||
: Not using the function, because aliases are expanded in functions;
|
||||
env_parallel --env _ myecho ::: work;
|
||||
echo OK if no .^^^^^^^^^^^^^^^^^^^^^^^^^ myecho >&2;
|
||||
env_parallel --env _ -S server myecho ::: work;
|
||||
echo OK if no .^^^^^^^^^^^^^^^^^^^^^^^^^ myecho >&2;
|
||||
echo myfunc >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
echo OK if no .^^^^^^^^^^^^^^^^^^^^^^^^^ myfunc >&2;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
echo OK if no .^^^^^^^^^^^^^^^^^^^^^^^^^ myfunc >&2;
|
||||
_EOS`
|
||||
_EOF
|
||||
)
|
||||
ssh zsh@lo "$myscript"
|
||||
}
|
||||
|
||||
par_ksh_underscore() {
|
||||
echo '### ksh'
|
||||
myscript=$(cat <<'_EOF'
|
||||
echo "### Testing of --env _"
|
||||
|
||||
. `which env_parallel.ksh`;
|
||||
env_parallel --record-env;
|
||||
alias myecho="echo \$myvar aliases in";
|
||||
myfunc() { myecho ${myarray[@]} functions $*; };
|
||||
myvar="variables in";
|
||||
myarray=(and arrays in);
|
||||
env_parallel myfunc ::: work;
|
||||
env_parallel -S server myfunc ::: work;
|
||||
env_parallel --env myfunc,myvar,myarray,myecho myfunc ::: work;
|
||||
env_parallel --env myfunc,myvar,myarray,myecho -S server myfunc ::: work;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
|
||||
echo myvar >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
echo myarray >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
echo myecho >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
echo "OK if no myecho ^^^^^^^^^^^^^^^^^" >&2;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
echo "OK if no myecho ^^^^^^^^^^^^^^^^^" >&2;
|
||||
echo myfunc >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
echo "OK if no myfunc ^^^^^^^^^^^^^^^^^" >&2;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
echo "OK if no myfunc ^^^^^^^^^^^^^^^^^" >&2;
|
||||
_EOF
|
||||
)
|
||||
ssh ksh@lo "$myscript"
|
||||
}
|
||||
|
||||
par_pdksh_underscore() {
|
||||
echo '### pdksh'
|
||||
myscript=$(cat <<'_EOF'
|
||||
echo "### Testing of --env _"
|
||||
|
||||
. `which env_parallel.pdksh`;
|
||||
env_parallel --record-env;
|
||||
alias myecho="echo \$myvar aliases in";
|
||||
myfunc() { myecho ${myarray[@]} functions $*; };
|
||||
myvar="variables in";
|
||||
myarray=(and arrays in);
|
||||
env_parallel myfunc ::: work;
|
||||
env_parallel -S server myfunc ::: work;
|
||||
env_parallel --env myfunc,myvar,myarray,myecho myfunc ::: work;
|
||||
env_parallel --env myfunc,myvar,myarray,myecho -S server myfunc ::: work;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
|
||||
echo myvar >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
echo myarray >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
echo myecho >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
echo "OK if no myecho ^^^^^^^^^^^^^^^^^" >&2;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
echo "OK if no myecho ^^^^^^^^^^^^^^^^^" >&2;
|
||||
echo myfunc >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
echo "OK if no myfunc ^^^^^^^^^^^^^^^^^" >&2;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
echo "OK if no myfunc ^^^^^^^^^^^^^^^^^" >&2;
|
||||
_EOF
|
||||
)
|
||||
ssh pdksh@lo "$myscript"
|
||||
}
|
||||
|
||||
par_tcsh_underscore() {
|
||||
echo '### tcsh'
|
||||
myscript=$(cat <<'_EOF'
|
||||
echo "### Testing of --env _"
|
||||
|
||||
# . `which env_parallel.tcsh`;
|
||||
env_parallel --record-env;
|
||||
alias myecho "echo "\$"myvar "\$'myarray'" aliases";
|
||||
set myvar="variables";
|
||||
set myarray=(and arrays in);
|
||||
env_parallel myecho ::: work;
|
||||
env_parallel -S server myecho ::: work;
|
||||
env_parallel --env myvar,myarray,myecho myecho ::: work;
|
||||
env_parallel --env myvar,myarray,myecho -S server myecho ::: work;
|
||||
env_parallel --env _ myecho ::: work;
|
||||
env_parallel --env _ -S server myecho ::: work;
|
||||
|
||||
echo myvar >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myecho ::: work;
|
||||
env_parallel --env _ -S server myecho ::: work;
|
||||
alias myecho "echo "\$'myarray'" aliases";
|
||||
echo myarray >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myecho ::: work;
|
||||
env_parallel --env _ -S server myecho ::: work;
|
||||
echo myecho >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myecho ::: work;
|
||||
echo "OK ^^^^^^^^^^^^^^^^^ if no myecho" >/dev/stderr;
|
||||
env_parallel --env _ -S server myecho ::: work;
|
||||
echo "OK ^^^^^^^^^^^^^^^^^ if no myecho" >/dev/stderr;
|
||||
_EOF
|
||||
)
|
||||
ssh -tt tcsh@lo "$myscript"
|
||||
}
|
||||
|
||||
par_csh_underscore() {
|
||||
echo '### csh'
|
||||
myscript=$(cat <<'_EOF'
|
||||
echo "### Testing of --env _"
|
||||
|
||||
# . `which env_parallel.csh`;
|
||||
env_parallel --record-env;
|
||||
alias myecho "echo "\$"myvar "\$'myarray'" aliases";
|
||||
set myvar="variables";
|
||||
set myarray=(and arrays in);
|
||||
env_parallel myecho ::: work;
|
||||
env_parallel -S server myecho ::: work;
|
||||
env_parallel --env myvar,myarray,myecho myecho ::: work;
|
||||
env_parallel --env myvar,myarray,myecho -S server myecho ::: work;
|
||||
env_parallel --env _ myecho ::: work;
|
||||
env_parallel --env _ -S server myecho ::: work;
|
||||
|
||||
echo myvar >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myecho ::: work;
|
||||
env_parallel --env _ -S server myecho ::: work;
|
||||
alias myecho "echo "\$'myarray'" aliases";
|
||||
echo myarray >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myecho ::: work;
|
||||
env_parallel --env _ -S server myecho ::: work;
|
||||
echo myecho >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myecho ::: work;
|
||||
echo "OK ^^^^^^^^^^^^^^^^^ if no myecho" >/dev/stderr;
|
||||
env_parallel --env _ -S server myecho ::: work;
|
||||
echo "OK ^^^^^^^^^^^^^^^^^ if no myecho" >/dev/stderr;
|
||||
_EOF
|
||||
)
|
||||
ssh -tt csh@lo "$myscript"
|
||||
}
|
||||
|
||||
par_fish_underscore() {
|
||||
echo '### fish'
|
||||
myscript=$(cat <<'_EOF'
|
||||
echo "### Testing of --env _"
|
||||
|
||||
# . `which env_parallel.fish`;
|
||||
env_parallel --record-env;
|
||||
alias myecho="echo \$myvar aliases";
|
||||
function myfunc
|
||||
myecho $myarray functions $argv
|
||||
end
|
||||
set myvar "variables in";
|
||||
set myarray and arrays in;
|
||||
env_parallel myfunc ::: work;
|
||||
env_parallel -S server myfunc ::: work;
|
||||
env_parallel --env myfunc,myvar,myarray,myecho myfunc ::: work;
|
||||
env_parallel --env myfunc,myvar,myarray,myecho -S server myfunc ::: work;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
|
||||
echo myvar >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
echo myarray >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
echo myecho >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
echo "OK if ^^^^^^^^^^^^^^^^^ no myecho" >&2;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
echo "OK if ^^^^^^^^^^^^^^^^^ no myecho" >&2;
|
||||
echo myfunc >> ~/.parallel/ignored_vars;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
echo "OK if ^^^^^^^^^^^^^^^^^ no myfunc" >&2;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
echo "OK if ^^^^^^^^^^^^^^^^^ no myfunc" >&2;
|
||||
_EOF
|
||||
)
|
||||
ssh fish@lo "$myscript"
|
||||
}
|
||||
|
||||
# Test env_parallel:
|
||||
# + for each shell
|
||||
# + remote, locally
|
||||
# + variables, variables with funky content, arrays, assoc array, functions, aliases
|
||||
|
||||
par_bash_funky() {
|
||||
myscript=$(cat <<'_EOF'
|
||||
myvar="myvar works"
|
||||
funky=$(perl -e "print pack \"c*\", 1..255")
|
||||
myarray=("" array_val2 3 "" 5 " space 6 ")
|
||||
declare -A assocarr
|
||||
assocarr[a]=assoc_val_a
|
||||
assocarr[b]=assoc_val_b
|
||||
alias alias_echo="echo 3 arg";
|
||||
func_echo() {
|
||||
echo $*;
|
||||
echo "$myvar"
|
||||
echo "${myarray[5]}"
|
||||
echo ${assocarr[a]}
|
||||
echo Funky-"$funky"-funky
|
||||
}
|
||||
. `which env_parallel.bash`
|
||||
env_parallel alias_echo ::: alias_works
|
||||
env_parallel func_echo ::: function_works
|
||||
env_parallel -S lo alias_echo ::: alias_works_over_ssh
|
||||
env_parallel -S lo func_echo ::: function_works_over_ssh
|
||||
echo
|
||||
echo "$funky" | parallel --shellquote
|
||||
_EOF
|
||||
)
|
||||
ssh bash@lo "$myscript"
|
||||
}
|
||||
|
||||
par_zsh_funky() {
|
||||
myscript=$(cat <<'_EOF'
|
||||
myvar="myvar works"
|
||||
funky=$(perl -e "print pack \"c*\", 1..255")
|
||||
myarray=("" array_val2 3 "" 5 " space 6 ")
|
||||
declare -A assocarr
|
||||
assocarr[a]=assoc_val_a
|
||||
assocarr[b]=assoc_val_b
|
||||
alias alias_echo="echo 3 arg";
|
||||
func_echo() {
|
||||
echo $*;
|
||||
echo "$myvar"
|
||||
echo "$myarray[6]"
|
||||
echo ${assocarr[a]}
|
||||
echo Funky-"$funky"-funky
|
||||
}
|
||||
env_parallel alias_echo ::: alias_works
|
||||
env_parallel func_echo ::: function_works
|
||||
env_parallel -S zsh@lo alias_echo ::: alias_works_over_ssh
|
||||
env_parallel -S zsh@lo func_echo ::: function_works_over_ssh
|
||||
echo
|
||||
echo "$funky" | parallel --shellquote
|
||||
_EOF
|
||||
)
|
||||
ssh zsh@lo "$myscript"
|
||||
}
|
||||
|
||||
par_ksh_funky() {
|
||||
myscript=$(cat <<'_EOF'
|
||||
. `which env_parallel.ksh`;
|
||||
|
||||
myvar="myvar works"
|
||||
funky=$(perl -e "print pack \"c*\", 1..255")
|
||||
myarray=("" array_val2 3 "" 5 " space 6 ")
|
||||
typeset -A assocarr
|
||||
assocarr[a]=assoc_val_a
|
||||
assocarr[b]=assoc_val_b
|
||||
alias alias_echo="echo 3 arg";
|
||||
|
||||
func_echo() {
|
||||
echo $*;
|
||||
echo "$myvar"
|
||||
echo "${myarray[5]}"
|
||||
echo ${assocarr[a]}
|
||||
echo Funky-"$funky"-funky
|
||||
}
|
||||
|
||||
env_parallel alias_echo ::: alias_works
|
||||
env_parallel func_echo ::: function_works
|
||||
env_parallel -S ksh@lo alias_echo ::: alias_works_over_ssh
|
||||
env_parallel -S ksh@lo func_echo ::: function_works_over_ssh
|
||||
echo
|
||||
echo "$funky" | parallel --shellquote
|
||||
_EOF
|
||||
)
|
||||
ssh ksh@lo "$myscript"
|
||||
}
|
||||
|
||||
par_pdksh_funky() {
|
||||
myscript=$(cat <<'_EOF'
|
||||
. `which env_parallel.pdksh`;
|
||||
|
||||
myvar="myvar works"
|
||||
funky=$(perl -e "print pack \"c*\", 1..255")
|
||||
myarray=("" array_val2 3 "" 5 " space 6 ")
|
||||
assocarr[a]=assoc_val_a
|
||||
assocarr[b]=assoc_val_b
|
||||
alias alias_echo="echo 3 arg";
|
||||
func_echo() {
|
||||
echo $*;
|
||||
echo "$myvar"
|
||||
echo "${myarray[5]}"
|
||||
echo ${assocarr[a]}
|
||||
echo Funky-"$funky"-funky
|
||||
}
|
||||
|
||||
env_parallel alias_echo ::: alias_works
|
||||
env_parallel func_echo ::: function_works
|
||||
env_parallel -S lo alias_echo ::: alias_works_over_ssh
|
||||
env_parallel -S lo func_echo ::: function_works_over_ssh
|
||||
echo
|
||||
echo "$funky" | parallel --shellquote
|
||||
_EOF
|
||||
)
|
||||
ssh pdksh@lo "$myscript"
|
||||
}
|
||||
|
||||
par_fish_funky() {
|
||||
myscript=$(cat <<'_EOF'
|
||||
set myvar "myvar works"
|
||||
setenv myenvvar "myenvvar works"
|
||||
|
||||
set funky (perl -e "print pack \"c*\", 1..255")
|
||||
setenv funkyenv (perl -e "print pack \"c*\", 1..255")
|
||||
|
||||
set myarray "" array_val2 3 "" 5 " space 6 "
|
||||
|
||||
# Assoc arrays do not exist
|
||||
#typeset -A assocarr
|
||||
#assocarr[a]=assoc_val_a
|
||||
#assocarr[b]=assoc_val_b
|
||||
alias alias_echo="echo 3 arg";
|
||||
|
||||
function func_echo
|
||||
echo $argv;
|
||||
echo "$myvar"
|
||||
echo "$myenvvar"
|
||||
echo "$myarray[6]"
|
||||
# Assoc arrays do not exist in fish
|
||||
# echo ${assocarr[a]}
|
||||
echo
|
||||
echo
|
||||
echo
|
||||
echo Funky-"$funky"-funky
|
||||
echo Funkyenv-"$funkyenv"-funkyenv
|
||||
echo
|
||||
echo
|
||||
echo
|
||||
end
|
||||
|
||||
env_parallel alias_echo ::: alias_works
|
||||
env_parallel func_echo ::: function_works
|
||||
env_parallel -S fish@lo alias_echo ::: alias_works_over_ssh
|
||||
env_parallel -S fish@lo func_echo ::: function_works_over_ssh
|
||||
echo
|
||||
echo "$funky" | parallel --shellquote
|
||||
_EOF
|
||||
)
|
||||
ssh fish@lo "$myscript"
|
||||
}
|
||||
|
||||
par_csh_funky() {
|
||||
myscript=$(cat <<'_EOF'
|
||||
set myvar = "myvar works"
|
||||
set funky = "`perl -e 'print pack q(c*), 2..255'`"
|
||||
set myarray = ('' 'array_val2' '3' '' '5' ' space 6 ')
|
||||
#declare -A assocarr
|
||||
#assocarr[a]=assoc_val_a
|
||||
#assocarr[b]=assoc_val_b
|
||||
alias alias_echo echo 3 arg;
|
||||
alias alias_echo_var 'echo $argv; echo "$myvar"; echo "${myarray[4]} special chars problem"; echo Funky-"$funky"-funky'
|
||||
|
||||
#function func_echo
|
||||
# echo $argv;
|
||||
# echo $myvar;
|
||||
# echo ${myarray[2]}
|
||||
# #echo ${assocarr[a]}
|
||||
# echo Funky-"$funky"-funky
|
||||
#end
|
||||
|
||||
env_parallel alias_echo ::: alias_works
|
||||
env_parallel alias_echo_var ::: alias_var_works
|
||||
env_parallel func_echo ::: function_does_not_work
|
||||
env_parallel -S csh@lo alias_echo ::: alias_works_over_ssh
|
||||
env_parallel -S csh@lo alias_echo_var ::: alias_var_works_over_ssh
|
||||
env_parallel -S csh@lo func_echo ::: function_does_not_work_over_ssh
|
||||
echo
|
||||
echo "$funky" | parallel --shellquote
|
||||
_EOF
|
||||
)
|
||||
ssh csh@lo "$myscript"
|
||||
}
|
||||
|
||||
par_tcsh_funky() {
|
||||
myscript=$(cat <<'_EOF'
|
||||
set myvar = "myvar works"
|
||||
set funky = "`perl -e 'print pack q(c*), 2..255'`"
|
||||
set myarray = ('' 'array_val2' '3' '' '5' ' space 6 ')
|
||||
# declare -A assocarr
|
||||
# assocarr[a]=assoc_val_a
|
||||
# assocarr[b]=assoc_val_b
|
||||
alias alias_echo echo 3 arg;
|
||||
alias alias_echo_var 'echo $argv; echo "$myvar"; echo "${myarray[4]} special chars problem"; echo Funky-"$funky"-funky'
|
||||
|
||||
# function func_echo
|
||||
# echo $argv;
|
||||
# echo $myvar;
|
||||
# echo ${myarray[2]}
|
||||
# #echo ${assocarr[a]}
|
||||
# echo Funky-"$funky"-funky
|
||||
# end
|
||||
|
||||
env_parallel alias_echo ::: alias_works
|
||||
env_parallel alias_echo_var ::: alias_var_works
|
||||
env_parallel func_echo ::: function_does_not_work
|
||||
env_parallel -S tcsh@lo alias_echo ::: alias_works_over_ssh
|
||||
env_parallel -S tcsh@lo alias_echo_var ::: alias_var_works_over_ssh
|
||||
env_parallel -S tcsh@lo func_echo ::: function_does_not_work_over_ssh
|
||||
echo
|
||||
echo "$funky" | parallel --shellquote
|
||||
_EOF
|
||||
)
|
||||
ssh tcsh@lo "$myscript"
|
||||
}
|
||||
|
||||
|
||||
export -f $(compgen -A function | grep par_)
|
||||
# Tested with -j1..8
|
||||
# -j6 was fastest
|
||||
compgen -A function | grep par_ | sort | parallel -j6 --tag -k '{} 2>&1'
|
|
@ -1,34 +1,17 @@
|
|||
echo '### Test of --retries on unreachable host'
|
||||
### Test of --retries on unreachable host
|
||||
seq 2 | stdout parallel -k --retries 2 -v -S 4.3.2.1,: echo
|
||||
parallel: Warning: Could not figure out number of cpus on 4.3.2.1 (). Using 1.
|
||||
echo 1
|
||||
1
|
||||
echo 2
|
||||
2
|
||||
echo '**'
|
||||
**
|
||||
echo "### Test Force outside the file handle limit, 2009-02-17 Gave fork error"
|
||||
### Test Force outside the file handle limit, 2009-02-17 Gave fork error
|
||||
(echo echo Start; seq 1 20000 | perl -pe 's/^/true /'; echo echo end) | stdout parallel -uj 0 | egrep -v 'processes took|adjusting'
|
||||
parallel: Warning: Only enough file handles to run 252 jobs in parallel.
|
||||
parallel: Warning: Running 'parallel -j0 -N 252 --pipe parallel -j0' or
|
||||
parallel: Warning: raising ulimit -n or /etc/security/limits.conf may help.
|
||||
Start
|
||||
end
|
||||
echo '**'
|
||||
**
|
||||
echo '### Test if we can deal with output > 4 GB'
|
||||
### Test if we can deal with output > 4 GB
|
||||
echo | nice parallel --tmpdir $TMP5G -q perl -e '$a="x"x1000000;for(0..4300){print $a}' | nice md5sum
|
||||
46a318993dfc8e2afd71ff2bc6f605f1 -
|
||||
echo '**'
|
||||
**
|
||||
echo 'bug #41613: --compress --line-buffer no --tagstring'; diff <(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'| nice parallel -N10 -L1 --pipe -j6 --block 20M --compress pv -qL 1000000 | perl -pe 's/(....).*/$1/') <(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'| nice parallel -N10 -L1 --pipe -j6 --block 20M --compress --line-buffer pv -qL 1000000 | perl -pe 's/(....).*/$1/') >/dev/null || (echo 'Good: --line-buffer matters'; false) && echo 'Bad: --line-buffer not working'
|
||||
bug #41613: --compress --line-buffer no --tagstring
|
||||
Good: --line-buffer matters
|
||||
echo 'bug #41613: --compress --line-buffer with --tagstring'; diff <(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'| nice parallel -N10 -L1 --pipe -j6 --block 20M --compress --tagstring {#} pv -qL 1000000 | perl -pe 's/(....).*/$1/') <(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'| nice parallel -N10 -L1 --pipe -j6 --block 20M --compress --tagstring {#} --line-buffer pv -qL 1000000 | perl -pe 's/(....).*/$1/') >/dev/null || (echo 'Good: --line-buffer matters'; false) && echo 'Bad: --line-buffer not working'
|
||||
bug #41613: --compress --line-buffer with --tagstring
|
||||
Good: --line-buffer matters
|
||||
echo '**'
|
||||
**
|
||||
par_outside_file_handle_limit 2>&1
|
||||
par_outside_file_handle_limit ### Test Force outside the file handle limit, 2009-02-17 Gave fork error
|
||||
par_outside_file_handle_limit parallel: Warning: Only enough file handles to run 252 jobs in parallel.
|
||||
par_outside_file_handle_limit parallel: Warning: Running 'parallel -j0 -N 252 --pipe parallel -j0' or
|
||||
par_outside_file_handle_limit parallel: Warning: raising ulimit -n or /etc/security/limits.conf may help.
|
||||
par_outside_file_handle_limit Start
|
||||
par_outside_file_handle_limit end
|
||||
par_over_4GB 2>&1
|
||||
par_over_4GB ### Test if we can deal with output > 4 GB
|
||||
par_over_4GB 46a318993dfc8e2afd71ff2bc6f605f1 -
|
||||
par_retries_unreachable 2>&1
|
||||
par_retries_unreachable ### Test of --retries on unreachable host
|
||||
par_retries_unreachable parallel: Warning: Could not figure out number of cpus on 4.3.2.1 (). Using 1.
|
||||
par_retries_unreachable echo 1
|
||||
par_retries_unreachable 1
|
||||
par_retries_unreachable echo 2
|
||||
par_retries_unreachable 2
|
||||
|
|
|
@ -1,34 +1,27 @@
|
|||
echo '### Test race condition on 8 CPU (my laptop)'; seq 1 5000000 > /tmp/parallel_test; seq 1 10 | parallel -k "cat /tmp/parallel_test | parallel --pipe --recend '' -k gzip >/dev/null; echo {}"; rm /tmp/parallel_test
|
||||
### Test race condition on 8 CPU (my laptop)
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
echo '**'
|
||||
**
|
||||
echo "### Test --tmpdir running full. bug #40733 was caused by this"
|
||||
### Test --tmpdir running full. bug #40733 was caused by this
|
||||
stdout parallel -j1 --tmpdir $SHM cat /dev/zero ::: dummy
|
||||
parallel: Error: Output is incomplete. Cannot append to buffer file in /tmp/shm/parallel. Is the disk full?
|
||||
parallel: Error: Change $TMPDIR with --tmpdir or use --compress.
|
||||
echo '**'
|
||||
**
|
||||
echo "### bug #48290: round-robin does not distribute data based on business"
|
||||
### bug #48290: round-robin does not distribute data based on business
|
||||
echo "Jobslot 1 is 8 times slower than jobslot 8 and should get much less data"
|
||||
Jobslot 1 is 8 times slower than jobslot 8 and should get much less data
|
||||
seq 10000000 | parallel --tagstring {%} --linebuffer --compress -j8 --roundrobin --pipe --block 300k 'pv -qL {%}00000'| perl -ne '/^\d+/ and $s{$&}++; END { print map { "$_\n" } sort { $s{$a} <=> $s{$b} } keys %s}'
|
||||
1
|
||||
2
|
||||
3
|
||||
5
|
||||
4
|
||||
7
|
||||
6
|
||||
8
|
||||
par_bug_48290 ### bug #48290: round-robin does not distribute data based on business
|
||||
par_bug_48290 Jobslot 1 is 256 times slower than jobslot 4 and should get much less data
|
||||
par_bug_48290 4
|
||||
par_bug_48290 3
|
||||
par_bug_48290 2
|
||||
par_bug_48290 1
|
||||
par_linebuffer_matters_compress ### (--linebuffer) --compress --tag should give different output
|
||||
par_linebuffer_matters_compress OK: --linebuffer makes a difference
|
||||
par_linebuffer_matters_compress_tag ### (--linebuffer) --compress --tag should give different output
|
||||
par_linebuffer_matters_compress_tag OK: --linebuffer makes a difference
|
||||
par_memory_leak ### Test for memory leaks
|
||||
par_memory_leak Of 10 runs of 1 job at least one should be bigger than a 3000 job run
|
||||
par_memory_leak Good: No memleak detected.
|
||||
par_race_condition1 ### Test race condition on 8 CPU (my laptop)
|
||||
par_race_condition1 1
|
||||
par_race_condition1 2
|
||||
par_race_condition1 3
|
||||
par_race_condition1 4
|
||||
par_race_condition1 5
|
||||
par_race_condition1 6
|
||||
par_race_condition1 7
|
||||
par_race_condition1 8
|
||||
par_race_condition1 9
|
||||
par_race_condition1 10
|
||||
par_tmp_full ### Test --tmpdir running full. bug #40733 was caused by this
|
||||
par_tmp_full parallel: Error: Output is incomplete. Cannot append to buffer file in /tmp/shm/parallel. Is the disk full?
|
||||
par_tmp_full parallel: Error: Change $TMPDIR with --tmpdir or use --compress.
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,65 +1,3 @@
|
|||
echo '### --env from man env_parallel'
|
||||
### --env from man env_parallel
|
||||
echo '### bash'
|
||||
### bash
|
||||
ssh bash@lo ' alias myecho="echo aliases"; env_parallel myecho ::: work; env_parallel -S server myecho ::: work; env_parallel --env myecho myecho ::: work; env_parallel --env myecho -S server myecho ::: work '
|
||||
aliases work
|
||||
aliases work
|
||||
aliases work
|
||||
aliases work
|
||||
ssh bash@lo ' myfunc() { echo functions $*; }; env_parallel myfunc ::: work; env_parallel -S server myfunc ::: work; env_parallel --env myfunc myfunc ::: work; env_parallel --env myfunc -S server myfunc ::: work '
|
||||
functions work
|
||||
functions work
|
||||
functions work
|
||||
functions work
|
||||
ssh bash@lo ' myvar=variables; env_parallel echo "\$myvar" ::: work; env_parallel -S server echo "\$myvar" ::: work; env_parallel --env myvar echo "\$myvar" ::: work; env_parallel --env myvar -S server echo "\$myvar" ::: work '
|
||||
variables work
|
||||
variables work
|
||||
variables work
|
||||
variables work
|
||||
ssh bash@lo ' myarray=(arrays work, too); env_parallel -k echo "\${myarray[{}]}" ::: 0 1 2; env_parallel -k -S server echo "\${myarray[{}]}" ::: 0 1 2; env_parallel -k --env myarray echo "\${myarray[{}]}" ::: 0 1 2; env_parallel -k --env myarray -S server echo "\${myarray[{}]}" ::: 0 1 2 '
|
||||
arrays
|
||||
work,
|
||||
too
|
||||
arrays
|
||||
work,
|
||||
too
|
||||
arrays
|
||||
work,
|
||||
too
|
||||
arrays
|
||||
work,
|
||||
too
|
||||
echo '### zsh'
|
||||
### zsh
|
||||
ssh zsh@lo ' alias myecho="echo aliases"; env_parallel myecho ::: work; env_parallel -S server myecho ::: work; env_parallel --env myecho myecho ::: work; env_parallel --env myecho -S server myecho ::: work '
|
||||
aliases work
|
||||
aliases work
|
||||
aliases work
|
||||
aliases work
|
||||
ssh zsh@lo ' myfunc() { echo functions $*; }; env_parallel myfunc ::: work; env_parallel -S server myfunc ::: work; env_parallel --env myfunc myfunc ::: work; env_parallel --env myfunc -S server myfunc ::: work '
|
||||
functions work
|
||||
functions work
|
||||
functions work
|
||||
functions work
|
||||
ssh zsh@lo ' myvar=variables; env_parallel echo "\$myvar" ::: work; env_parallel -S server echo "\$myvar" ::: work; env_parallel --env myvar echo "\$myvar" ::: work; env_parallel --env myvar -S server echo "\$myvar" ::: work '
|
||||
variables work
|
||||
variables work
|
||||
variables work
|
||||
variables work
|
||||
ssh zsh@lo ' myarray=(arrays work, too); env_parallel -k echo "\${myarray[{}]}" ::: 1 2 3; env_parallel -k -S server echo "\${myarray[{}]}" ::: 1 2 3; env_parallel -k --env myarray echo "\${myarray[{}]}" ::: 1 2 3; env_parallel -k --env myarray -S server echo "\${myarray[{}]}" ::: 1 2 3 '
|
||||
arrays
|
||||
work,
|
||||
too
|
||||
arrays
|
||||
work,
|
||||
too
|
||||
arrays
|
||||
work,
|
||||
too
|
||||
arrays
|
||||
work,
|
||||
too
|
||||
echo '### --env _'
|
||||
### --env _
|
||||
fUbAr="OK FUBAR" parallel -S parallel@lo --env _ echo '$fUbAr $DEBEMAIL' ::: test
|
||||
|
@ -77,14 +15,6 @@ bug #40137: SHELL not bash: Warning when exporting funcs
|
|||
no_warning
|
||||
. <(printf 'myfunc() {\necho $1\n}'); export -f myfunc; SHELL=/bin/sh parallel --env myfunc -S lo myfunc ::: warning
|
||||
warning
|
||||
echo 'env_parallel from man page - transfer non-exported var'
|
||||
env_parallel from man page - transfer non-exported var
|
||||
source $(which env_parallel.bash); var=nonexported env_parallel -S parallel@lo echo '$var' ::: variable
|
||||
nonexported variable
|
||||
echo 'compared to parallel - no transfer non-exported var'
|
||||
compared to parallel - no transfer non-exported var
|
||||
var=nonexported parallel -S parallel@lo echo '$var' ::: variable
|
||||
variable
|
||||
echo '### zsh'
|
||||
### zsh
|
||||
echo 'env in zsh'
|
||||
|
@ -194,135 +124,3 @@ echo '### bug #45575: -m and multiple hosts repeats first args'
|
|||
1
|
||||
2
|
||||
3
|
||||
|
||||
Test env_parallel:
|
||||
+ for each shell
|
||||
+ remote, locally
|
||||
+ variables, variables with funky content, arrays, assoc array, functions, aliases
|
||||
|
||||
### Bash environment
|
||||
3 arg alias_works
|
||||
function_works
|
||||
myvar works
|
||||
space 6
|
||||
assoc_val_a
|
||||
Funky-
|
||||
|
||||
|
||||
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
|
||||
€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<EFBFBD><EFBFBD><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>-funky
|
||||
3 arg alias_works_over_ssh
|
||||
function_works_over_ssh
|
||||
myvar works
|
||||
space 6
|
||||
assoc_val_a
|
||||
Funky-
|
||||
|
||||
|
||||
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
|
||||
€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<EFBFBD><EFBFBD><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>-funky
|
||||
|
||||
\\\\\\\\
|
||||
\\\
\\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>╘‐猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96>
|
||||
|
||||
### Zsh environment
|
||||
|
||||
* Documentation: http://www.linuxmint.com
|
||||
3 arg alias_works
|
||||
function_works
|
||||
myvar works
|
||||
space 6
|
||||
assoc_val_a
|
||||
Funky-
|
||||
|
||||
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
|
||||
3 arg alias_works_over_ssh
|
||||
function_works_over_ssh
|
||||
myvar works
|
||||
space 6
|
||||
assoc_val_a
|
||||
Funky-
|
||||
|
||||
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
|
||||
|
||||
\\\\\\\\
|
||||
\\\
\\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>╘‐猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96>
|
||||
|
||||
### Ksh environment
|
||||
|
||||
* Documentation: http://www.linuxmint.com
|
||||
3 arg alias_works
|
||||
function_works
|
||||
myvar works
|
||||
space 6
|
||||
assoc_val_a
|
||||
Funky-
|
||||
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
|
||||
3 arg alias_works_over_ssh
|
||||
function_works_over_ssh
|
||||
myvar works
|
||||
space 6
|
||||
assoc_val_a
|
||||
Funky-
|
||||
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
|
||||
|
||||
\\\\\\\\
|
||||
\\\
\\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>╘‐猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96>
|
||||
|
||||
### Fish environment
|
||||
|
||||
* Documentation: http://www.linuxmint.com
|
||||
env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
3 arg alias_works
|
||||
env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
function_works
|
||||
myvar works
|
||||
myenvvar works
|
||||
space 6
|
||||
|
||||
|
||||
|
||||
Funky-
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
|
||||
Funkyenv-
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funkyenv
|
||||
|
||||
|
||||
|
||||
env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
3 arg alias_works_over_ssh
|
||||
env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
function_works_over_ssh
|
||||
myvar works
|
||||
myenvvar works
|
||||
space 6
|
||||
|
||||
|
||||
|
||||
Funky-
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
|
||||
Funkyenv-
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funkyenv
|
||||
|
||||
|
||||
|
||||
|
||||
\\\\\\\\ \ \\\
\\\\\\\\\\\\\\ \ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>╘‐猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96>
|
||||
|
||||
### csh environment
|
||||
|
||||
* Documentation: http://www.linuxmint.com
|
||||
Warning: no access to tty (Bad file descriptor).
|
||||
Thus no job control in this shell.
|
||||
3 arg alias_works
|
||||
|
||||
myvar works
|
||||
space special chars problem
|
||||
Funky-
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky alias_var_works
|
||||
func_echo: Command not found.
|
||||
3 arg alias_works_over_ssh
|
||||
myvar works
|
||||
space special chars problem
|
||||
Funky-
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky alias_var_works_over_ssh
|
||||
func_echo: Command not found.
|
||||
\\\\\\\\ \ \\\
\\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>╘‐猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96>
|
||||
|
|
468
testsuite/wanted-results/parallel-local-ssh7
Normal file
468
testsuite/wanted-results/parallel-local-ssh7
Normal file
|
@ -0,0 +1,468 @@
|
|||
### test --env _
|
||||
Both test that variables are copied,
|
||||
but also that they are NOT copied, if ignored
|
||||
par_bash_funky 3 arg alias_works
|
||||
par_bash_funky function_works
|
||||
par_bash_funky myvar works
|
||||
par_bash_funky space 6
|
||||
par_bash_funky assoc_val_a
|
||||
par_bash_funky Funky-
|
||||
par_bash_funky
|
||||
par_bash_funky
|
||||
par_bash_funky
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
|
||||
par_bash_funky €亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
|
||||
par_bash_funky 3 arg alias_works_over_ssh
|
||||
par_bash_funky function_works_over_ssh
|
||||
par_bash_funky myvar works
|
||||
par_bash_funky space 6
|
||||
par_bash_funky assoc_val_a
|
||||
par_bash_funky Funky-
|
||||
par_bash_funky
|
||||
par_bash_funky
|
||||
par_bash_funky
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
|
||||
par_bash_funky €亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
|
||||
par_bash_funky
|
||||
par_bash_funky \\\\\\\\
|
||||
par_bash_funky \\\
\\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>╘‐猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96>
|
||||
par_bash_man ### bash
|
||||
par_bash_man ### From man env_parallel
|
||||
par_bash_man aliases work
|
||||
par_bash_man aliases work
|
||||
par_bash_man aliases work
|
||||
par_bash_man aliases work
|
||||
par_bash_man functions work
|
||||
par_bash_man functions work
|
||||
par_bash_man functions work
|
||||
par_bash_man functions work
|
||||
par_bash_man variables work
|
||||
par_bash_man variables work
|
||||
par_bash_man variables work
|
||||
par_bash_man variables work
|
||||
par_bash_man arrays
|
||||
par_bash_man work,
|
||||
par_bash_man too
|
||||
par_bash_man arrays
|
||||
par_bash_man work,
|
||||
par_bash_man too
|
||||
par_bash_man arrays
|
||||
par_bash_man work,
|
||||
par_bash_man too
|
||||
par_bash_man arrays
|
||||
par_bash_man work,
|
||||
par_bash_man too
|
||||
par_bash_underscore ### bash
|
||||
par_bash_underscore ### Testing of --env _
|
||||
par_bash_underscore variables in aliases in and arrays in functions work
|
||||
par_bash_underscore variables in aliases in and arrays in functions work
|
||||
par_bash_underscore variables in aliases in and arrays in functions work
|
||||
par_bash_underscore variables in aliases in and arrays in functions work
|
||||
par_bash_underscore variables in aliases in and arrays in functions work
|
||||
par_bash_underscore variables in aliases in and arrays in functions work
|
||||
par_bash_underscore aliases in and arrays in functions work
|
||||
par_bash_underscore aliases in and arrays in functions work
|
||||
par_bash_underscore aliases in functions work
|
||||
par_bash_underscore aliases in functions work
|
||||
par_bash_underscore /bin/bash: line 139: myecho: command not found
|
||||
par_bash_underscore OK if no myecho ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
par_bash_underscore /bin/bash: line 139: myecho: command not found
|
||||
par_bash_underscore OK if no myecho ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
par_bash_underscore /bin/bash: line 136: myfunc: command not found
|
||||
par_bash_underscore OK if no myfunc ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
par_bash_underscore /bin/bash: line 136: myfunc: command not found
|
||||
par_bash_underscore OK if no myfunc ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
par_csh_funky 3 arg alias_works
|
||||
par_csh_funky myvar works
|
||||
par_csh_funky space special chars problem
|
||||
par_csh_funky Funky-
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky alias_var_works
|
||||
par_csh_funky func_echo: Command not found.
|
||||
par_csh_funky 3 arg alias_works_over_ssh
|
||||
par_csh_funky myvar works
|
||||
par_csh_funky space special chars problem
|
||||
par_csh_funky Funky-
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky alias_var_works_over_ssh
|
||||
par_csh_funky func_echo: Command not found.
|
||||
par_csh_funky \\\\\\\\ \ \\\
\\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>╘‐猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96>
|
||||
par_csh_man ### csh
|
||||
par_csh_man ### From man env_parallel
|
||||
par_csh_man aliases work
|
||||
par_csh_man aliases work
|
||||
par_csh_man aliases work
|
||||
par_csh_man aliases work
|
||||
par_csh_man variables work
|
||||
par_csh_man variables work
|
||||
par_csh_man variables work
|
||||
par_csh_man variables work
|
||||
par_csh_man arrays
|
||||
par_csh_man work,
|
||||
par_csh_man too
|
||||
par_csh_man arrays
|
||||
par_csh_man work,
|
||||
par_csh_man too
|
||||
par_csh_man arrays
|
||||
par_csh_man work,
|
||||
par_csh_man too
|
||||
par_csh_man arrays
|
||||
par_csh_man work,
|
||||
par_csh_man too
|
||||
par_csh_underscore ### csh
|
||||
par_csh_underscore ### Testing of --env _
|
||||
par_csh_underscore #: Command not found.
|
||||
par_csh_underscore variables and arrays in aliases work
|
||||
par_csh_underscore variables and arrays in aliases work
|
||||
par_csh_underscore variables and arrays in aliases work
|
||||
par_csh_underscore variables and arrays in aliases work
|
||||
par_csh_underscore variables and arrays in aliases work
|
||||
par_csh_underscore variables and arrays in aliases work
|
||||
par_csh_underscore myvar: Undefined variable.
|
||||
par_csh_underscore myvar: Undefined variable.
|
||||
par_csh_underscore myarray: Undefined variable.
|
||||
par_csh_underscore myarray: Undefined variable.
|
||||
par_csh_underscore myecho: Command not found.
|
||||
par_csh_underscore OK ^^^^^^^^^^^^^^^^^ if no myecho
|
||||
par_csh_underscore myecho: Command not found.
|
||||
par_csh_underscore OK ^^^^^^^^^^^^^^^^^ if no myecho
|
||||
par_csh_underscore Connection to lo closed.
|
||||
par_fish_funky env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
par_fish_funky env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
par_fish_funky 3 arg alias_works
|
||||
par_fish_funky env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
par_fish_funky env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
par_fish_funky function_works
|
||||
par_fish_funky myvar works
|
||||
par_fish_funky myenvvar works
|
||||
par_fish_funky space 6
|
||||
par_fish_funky
|
||||
par_fish_funky
|
||||
par_fish_funky
|
||||
par_fish_funky Funky-
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
|
||||
par_fish_funky Funkyenv-
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funkyenv
|
||||
par_fish_funky
|
||||
par_fish_funky
|
||||
par_fish_funky
|
||||
par_fish_funky env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
par_fish_funky env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
par_fish_funky 3 arg alias_works_over_ssh
|
||||
par_fish_funky env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
par_fish_funky env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
par_fish_funky function_works_over_ssh
|
||||
par_fish_funky myvar works
|
||||
par_fish_funky myenvvar works
|
||||
par_fish_funky space 6
|
||||
par_fish_funky
|
||||
par_fish_funky
|
||||
par_fish_funky
|
||||
par_fish_funky Funky-
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
|
||||
par_fish_funky Funkyenv-
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funkyenv
|
||||
par_fish_funky
|
||||
par_fish_funky
|
||||
par_fish_funky
|
||||
par_fish_funky
|
||||
par_fish_funky \\\\\\\\ \ \\\
\\\\\\\\\\\\\\ \ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>╘‐猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96>
|
||||
par_fish_man ### fish
|
||||
par_fish_man ### From man env_parallel
|
||||
par_fish_man aliases work
|
||||
par_fish_man aliases work
|
||||
par_fish_man aliases work
|
||||
par_fish_man aliases work
|
||||
par_fish_man functions work
|
||||
par_fish_man functions work
|
||||
par_fish_man functions work
|
||||
par_fish_man functions work
|
||||
par_fish_man variables work
|
||||
par_fish_man variables work
|
||||
par_fish_man variables work
|
||||
par_fish_man variables work
|
||||
par_fish_man arrays
|
||||
par_fish_man work,
|
||||
par_fish_man too
|
||||
par_fish_man arrays
|
||||
par_fish_man work,
|
||||
par_fish_man too
|
||||
par_fish_man arrays
|
||||
par_fish_man work,
|
||||
par_fish_man too
|
||||
par_fish_man arrays
|
||||
par_fish_man work,
|
||||
par_fish_man too
|
||||
par_fish_underscore ### fish
|
||||
par_fish_underscore ### Testing of --env _
|
||||
par_fish_underscore variables in aliases and arrays in functions work
|
||||
par_fish_underscore variables in aliases and arrays in functions work
|
||||
par_fish_underscore variables in aliases and arrays in functions work
|
||||
par_fish_underscore variables in aliases and arrays in functions work
|
||||
par_fish_underscore variables in aliases and arrays in functions work
|
||||
par_fish_underscore variables in aliases and arrays in functions work
|
||||
par_fish_underscore aliases and arrays in functions work
|
||||
par_fish_underscore aliases and arrays in functions work
|
||||
par_fish_underscore aliases functions work
|
||||
par_fish_underscore aliases functions work
|
||||
par_fish_underscore fish: Unknown command 鈥渕yecho鈥<6F>
|
||||
par_fish_underscore Standard input: myecho $myarray functions $argv
|
||||
par_fish_underscore ^
|
||||
par_fish_underscore in function 鈥渕yfunc鈥<63>,
|
||||
par_fish_underscore called on standard input,
|
||||
par_fish_underscore with parameter list 鈥渨ork鈥<6B>
|
||||
par_fish_underscore
|
||||
par_fish_underscore OK if ^^^^^^^^^^^^^^^^^ no myecho
|
||||
par_fish_underscore fish: Unknown command 鈥渕yecho鈥<6F>
|
||||
par_fish_underscore Standard input: myecho $myarray functions $argv
|
||||
par_fish_underscore ^
|
||||
par_fish_underscore in function 鈥渕yfunc鈥<63>,
|
||||
par_fish_underscore called on standard input,
|
||||
par_fish_underscore with parameter list 鈥渨ork鈥<6B>
|
||||
par_fish_underscore
|
||||
par_fish_underscore OK if ^^^^^^^^^^^^^^^^^ no myecho
|
||||
par_fish_underscore fish: Unknown command 鈥渕yfunc鈥<63>
|
||||
par_fish_underscore Standard input: myfunc work
|
||||
par_fish_underscore ^
|
||||
par_fish_underscore OK if ^^^^^^^^^^^^^^^^^ no myfunc
|
||||
par_fish_underscore fish: Unknown command 鈥渕yfunc鈥<63>
|
||||
par_fish_underscore Standard input: myfunc work
|
||||
par_fish_underscore ^
|
||||
par_fish_underscore OK if ^^^^^^^^^^^^^^^^^ no myfunc
|
||||
par_ksh_funky 3 arg alias_works
|
||||
par_ksh_funky function_works
|
||||
par_ksh_funky myvar works
|
||||
par_ksh_funky space 6
|
||||
par_ksh_funky assoc_val_a
|
||||
par_ksh_funky Funky-
|
||||
par_ksh_funky
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
|
||||
par_ksh_funky 3 arg alias_works_over_ssh
|
||||
par_ksh_funky function_works_over_ssh
|
||||
par_ksh_funky myvar works
|
||||
par_ksh_funky space 6
|
||||
par_ksh_funky assoc_val_a
|
||||
par_ksh_funky Funky-
|
||||
par_ksh_funky
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
|
||||
par_ksh_funky
|
||||
par_ksh_funky \\\\\\\\
|
||||
par_ksh_funky \\\
\\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>╘‐猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96>
|
||||
par_ksh_man ### ksh
|
||||
par_ksh_man ### From man env_parallel
|
||||
par_ksh_man aliases work
|
||||
par_ksh_man aliases work
|
||||
par_ksh_man aliases work
|
||||
par_ksh_man aliases work
|
||||
par_ksh_man functions work
|
||||
par_ksh_man functions work
|
||||
par_ksh_man functions work
|
||||
par_ksh_man functions work
|
||||
par_ksh_man variables work
|
||||
par_ksh_man variables work
|
||||
par_ksh_man variables work
|
||||
par_ksh_man variables work
|
||||
par_ksh_man arrays
|
||||
par_ksh_man work,
|
||||
par_ksh_man too
|
||||
par_ksh_man arrays
|
||||
par_ksh_man work,
|
||||
par_ksh_man too
|
||||
par_ksh_man arrays
|
||||
par_ksh_man work,
|
||||
par_ksh_man too
|
||||
par_ksh_man arrays
|
||||
par_ksh_man work,
|
||||
par_ksh_man too
|
||||
par_ksh_underscore ### ksh
|
||||
par_ksh_underscore ### Testing of --env _
|
||||
par_ksh_underscore variables in aliases in and arrays in functions work
|
||||
par_ksh_underscore variables in aliases in and arrays in functions work
|
||||
par_ksh_underscore variables in aliases in and arrays in functions work
|
||||
par_ksh_underscore variables in aliases in and arrays in functions work
|
||||
par_ksh_underscore variables in aliases in and arrays in functions work
|
||||
par_ksh_underscore variables in aliases in and arrays in functions work
|
||||
par_ksh_underscore aliases in and arrays in functions work
|
||||
par_ksh_underscore aliases in and arrays in functions work
|
||||
par_ksh_underscore aliases in functions work
|
||||
par_ksh_underscore aliases in functions work
|
||||
par_ksh_underscore /usr/bin/ksh[193]: myecho: not found [No such file or directory]
|
||||
par_ksh_underscore OK if no myecho ^^^^^^^^^^^^^^^^^
|
||||
par_ksh_underscore /usr/bin/ksh[193]: myecho: not found [No such file or directory]
|
||||
par_ksh_underscore OK if no myecho ^^^^^^^^^^^^^^^^^
|
||||
par_ksh_underscore /usr/bin/ksh: line 193: myfunc: not found
|
||||
par_ksh_underscore OK if no myfunc ^^^^^^^^^^^^^^^^^
|
||||
par_ksh_underscore /usr/bin/ksh: line 193: myfunc: not found
|
||||
par_ksh_underscore OK if no myfunc ^^^^^^^^^^^^^^^^^
|
||||
par_pdksh_funky 3 arg alias_works
|
||||
par_pdksh_funky function_works
|
||||
par_pdksh_funky myvar works
|
||||
par_pdksh_funky space 6
|
||||
par_pdksh_funky assoc_val_b
|
||||
par_pdksh_funky Funky-
|
||||
par_pdksh_funky
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
|
||||
par_pdksh_funky 3 arg alias_works_over_ssh
|
||||
par_pdksh_funky function_works_over_ssh
|
||||
par_pdksh_funky myvar works
|
||||
par_pdksh_funky space 6
|
||||
par_pdksh_funky assoc_val_b
|
||||
par_pdksh_funky Funky-
|
||||
par_pdksh_funky
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
|
||||
par_pdksh_funky
|
||||
par_pdksh_funky \\\\\\\\
|
||||
par_pdksh_funky \\\
\\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>╘‐猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96>
|
||||
par_pdksh_man ### pdksh
|
||||
par_pdksh_man ### From man env_parallel
|
||||
par_pdksh_man aliases work
|
||||
par_pdksh_man aliases work
|
||||
par_pdksh_man aliases work
|
||||
par_pdksh_man aliases work
|
||||
par_pdksh_man functions work
|
||||
par_pdksh_man functions work
|
||||
par_pdksh_man functions work
|
||||
par_pdksh_man functions work
|
||||
par_pdksh_man variables work
|
||||
par_pdksh_man variables work
|
||||
par_pdksh_man variables work
|
||||
par_pdksh_man variables work
|
||||
par_pdksh_man arrays
|
||||
par_pdksh_man work,
|
||||
par_pdksh_man too
|
||||
par_pdksh_man arrays
|
||||
par_pdksh_man work,
|
||||
par_pdksh_man too
|
||||
par_pdksh_man arrays
|
||||
par_pdksh_man work,
|
||||
par_pdksh_man too
|
||||
par_pdksh_man arrays
|
||||
par_pdksh_man work,
|
||||
par_pdksh_man too
|
||||
par_pdksh_underscore ### pdksh
|
||||
par_pdksh_underscore ### Testing of --env _
|
||||
par_pdksh_underscore variables in aliases in and arrays in functions work
|
||||
par_pdksh_underscore variables in aliases in and arrays in functions work
|
||||
par_pdksh_underscore variables in aliases in and arrays in functions work
|
||||
par_pdksh_underscore variables in aliases in and arrays in functions work
|
||||
par_pdksh_underscore variables in aliases in and arrays in functions work
|
||||
par_pdksh_underscore variables in aliases in and arrays in functions work
|
||||
par_pdksh_underscore aliases in and arrays in functions work
|
||||
par_pdksh_underscore aliases in and arrays in functions work
|
||||
par_pdksh_underscore aliases in functions work
|
||||
par_pdksh_underscore aliases in functions work
|
||||
par_pdksh_underscore aliases in functions work
|
||||
par_pdksh_underscore OK if no myecho ^^^^^^^^^^^^^^^^^
|
||||
par_pdksh_underscore aliases in functions work
|
||||
par_pdksh_underscore OK if no myecho ^^^^^^^^^^^^^^^^^
|
||||
par_pdksh_underscore /bin/pdksh: myfunc: not found
|
||||
par_pdksh_underscore OK if no myfunc ^^^^^^^^^^^^^^^^^
|
||||
par_pdksh_underscore /bin/pdksh: myfunc: not found
|
||||
par_pdksh_underscore OK if no myfunc ^^^^^^^^^^^^^^^^^
|
||||
par_tcsh_funky 3 arg alias_works
|
||||
par_tcsh_funky
|
||||
par_tcsh_funky myvar works
|
||||
par_tcsh_funky space special chars problem
|
||||
par_tcsh_funky Funky-
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A>-funky alias_var_works
|
||||
par_tcsh_funky func_echo: Command not found.
|
||||
par_tcsh_funky 3 arg alias_works_over_ssh
|
||||
par_tcsh_funky
|
||||
par_tcsh_funky myvar works
|
||||
par_tcsh_funky space special chars problem
|
||||
par_tcsh_funky Funky-
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A>-funky alias_var_works_over_ssh
|
||||
par_tcsh_funky func_echo: Command not found.
|
||||
par_tcsh_funky
|
||||
par_tcsh_funky \\\\\\\\ \ \\\
\\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>╘‐猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟<E9B3BF>
|
||||
par_tcsh_man ### tcsh
|
||||
par_tcsh_man ### From man env_parallel
|
||||
par_tcsh_man aliases work
|
||||
par_tcsh_man aliases work
|
||||
par_tcsh_man aliases work
|
||||
par_tcsh_man aliases work
|
||||
par_tcsh_man Functions not supported
|
||||
par_tcsh_man variables work
|
||||
par_tcsh_man variables work
|
||||
par_tcsh_man variables work
|
||||
par_tcsh_man variables work
|
||||
par_tcsh_man arrays
|
||||
par_tcsh_man work,
|
||||
par_tcsh_man too
|
||||
par_tcsh_man arrays
|
||||
par_tcsh_man work,
|
||||
par_tcsh_man too
|
||||
par_tcsh_man arrays
|
||||
par_tcsh_man work,
|
||||
par_tcsh_man too
|
||||
par_tcsh_man arrays
|
||||
par_tcsh_man work,
|
||||
par_tcsh_man too
|
||||
par_tcsh_man Connection to lo closed.
|
||||
par_tcsh_underscore ### tcsh
|
||||
par_tcsh_underscore ### Testing of --env _
|
||||
par_tcsh_underscore #: Command not found.
|
||||
par_tcsh_underscore variables and arrays in aliases work
|
||||
par_tcsh_underscore variables and arrays in aliases work
|
||||
par_tcsh_underscore variables and arrays in aliases work
|
||||
par_tcsh_underscore variables and arrays in aliases work
|
||||
par_tcsh_underscore variables and arrays in aliases work
|
||||
par_tcsh_underscore variables and arrays in aliases work
|
||||
par_tcsh_underscore myvar: Undefined variable.
|
||||
par_tcsh_underscore myvar: Undefined variable.
|
||||
par_tcsh_underscore myarray: Undefined variable.
|
||||
par_tcsh_underscore myarray: Undefined variable.
|
||||
par_tcsh_underscore myecho: Command not found.
|
||||
par_tcsh_underscore OK ^^^^^^^^^^^^^^^^^ if no myecho
|
||||
par_tcsh_underscore myecho: Command not found.
|
||||
par_tcsh_underscore OK ^^^^^^^^^^^^^^^^^ if no myecho
|
||||
par_tcsh_underscore Connection to lo closed.
|
||||
par_zsh_funky 3 arg alias_works
|
||||
par_zsh_funky function_works
|
||||
par_zsh_funky myvar works
|
||||
par_zsh_funky space 6
|
||||
par_zsh_funky assoc_val_a
|
||||
par_zsh_funky Funky-
|
||||
par_zsh_funky
|
||||
par_zsh_funky
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
|
||||
par_zsh_funky 3 arg alias_works_over_ssh
|
||||
par_zsh_funky function_works_over_ssh
|
||||
par_zsh_funky myvar works
|
||||
par_zsh_funky space 6
|
||||
par_zsh_funky assoc_val_a
|
||||
par_zsh_funky Funky-
|
||||
par_zsh_funky
|
||||
par_zsh_funky
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
|
||||
par_zsh_funky
|
||||
par_zsh_funky \\\\\\\\
|
||||
par_zsh_funky \\\
\\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€乗俓僜刓匼哱嘰圽塡奬媆孿峔嶾廫怽慭抃揬擻昞朶梊榎橽歕沑淺漒瀄焅燶<E78485><E787B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>╘‐猏玕琝璡甛痋癨盶瞈砛碶礬禱穃竆筡篭籠糪絓綷縗繺羂耚肻腬臷芢荺萛蒤蔦薥蘚蚛蝄蟎衆裓襖覾診誠謀譢豛賊赲踈躙輁轡運郳醆鈂鉢鋅錦鎈鏫鑌閈闬隲靄韁頫颸餦馶騖骪鬨鮘鯸鱘鳿鵟鶿鸤黒齖㘎<E9BD96>
|
||||
par_zsh_man ### zsh
|
||||
par_zsh_man ### From man env_parallel
|
||||
par_zsh_man aliases work
|
||||
par_zsh_man aliases work
|
||||
par_zsh_man aliases work
|
||||
par_zsh_man aliases work
|
||||
par_zsh_man functions work
|
||||
par_zsh_man functions work
|
||||
par_zsh_man functions work
|
||||
par_zsh_man functions work
|
||||
par_zsh_man variables work
|
||||
par_zsh_man variables work
|
||||
par_zsh_man variables work
|
||||
par_zsh_man variables work
|
||||
par_zsh_man arrays
|
||||
par_zsh_man work,
|
||||
par_zsh_man too
|
||||
par_zsh_man arrays
|
||||
par_zsh_man work,
|
||||
par_zsh_man too
|
||||
par_zsh_man arrays
|
||||
par_zsh_man work,
|
||||
par_zsh_man too
|
||||
par_zsh_man arrays
|
||||
par_zsh_man work,
|
||||
par_zsh_man too
|
||||
par_zsh_underscore ### zsh
|
||||
par_zsh_underscore ### Testing of --env _
|
||||
par_zsh_underscore variables in aliases in and arrays in functions work
|
||||
par_zsh_underscore variables in aliases in and arrays in functions work
|
||||
par_zsh_underscore variables in aliases in and arrays in functions work
|
||||
par_zsh_underscore variables in aliases in and arrays in functions work
|
||||
par_zsh_underscore variables in aliases in and arrays in functions work
|
||||
par_zsh_underscore variables in aliases in and arrays in functions work
|
||||
par_zsh_underscore aliases in and arrays in functions work
|
||||
par_zsh_underscore aliases in and arrays in functions work
|
||||
par_zsh_underscore aliases in functions work
|
||||
par_zsh_underscore aliases in functions work
|
||||
par_zsh_underscore (eval):1: command not found: myecho
|
||||
par_zsh_underscore OK if no .^^^^^^^^^^^^^^^^^^^^^^^^^ myecho
|
||||
par_zsh_underscore (eval):1: command not found: myecho
|
||||
par_zsh_underscore OK if no .^^^^^^^^^^^^^^^^^^^^^^^^^ myecho
|
||||
par_zsh_underscore (eval):1: command not found: myfunc
|
||||
par_zsh_underscore OK if no .^^^^^^^^^^^^^^^^^^^^^^^^^ myfunc
|
||||
par_zsh_underscore (eval):1: command not found: myfunc
|
||||
par_zsh_underscore OK if no .^^^^^^^^^^^^^^^^^^^^^^^^^ myfunc
|
Loading…
Reference in a new issue