parset: set exit code.

This commit is contained in:
Ole Tange 2018-08-23 00:21:29 +02:00
parent 29fbb5f85f
commit 490474ea8c
42 changed files with 2513 additions and 2851 deletions

View file

@ -206,35 +206,22 @@ to:parallel@gnu.org, bug-parallel@gnu.org
stable-bcc: Jesse Alama <jessealama@fastmail.fm> stable-bcc: Jesse Alama <jessealama@fastmail.fm>
Subject: GNU Parallel 20180722 ('Crimson Hexagon') released [alpha] <<[stable]>> Subject: GNU Parallel 20180822 ('Genova/Lombok/AM2431/Zimbabwe/Parker Solar Probe') released [alpha] <<[stable]>>
GNU Parallel 20180722 ('Crimson Hexagon') [alpha] <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/ GNU Parallel 20180822 ('') [alpha] <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/
This release has signficant changes and is considered alpha quality. This release has signficant changes and is considered alpha quality.
<<No new functionality was introduced so this is a good candidate for a stable release.>> <<No new functionality was introduced so this is a good candidate for a stable release.>>
Quote of the month: Quote of the month:
I've been using GNU Parallel very much and effectively lately. GNU parallel is a thing of magic.
Such an easy way to get huge speed-ups with my simple bash/Perl/Python
programs -- parallelize them! -- Josh Meyer @joshmeyerphd@twitter
-- Ken Youens-Clark @kycl4rk@twitter
New in this release: New in this release:
* The quoting engine has been changed. Instead of using \-quoting GNU Parallel now uses '-quoting in bash/ash/dash/ksh. This should improve compatibility with different locales. This is a big change causing this release to be alpha quality. * How to install GNU Parallel https://www.techrepublic.com/videos/how-to-install-gnu-parallel/
* The CPU calculation has changed. By default GNU Parallel uses the number of CPU threads as the number of CPUs. This can be change to the number of CPU cores or number of CPU sockets with --use-cores-instead-of-threads or --use-sockets-instead-of-threads.
* The detected number of sockets, cores, and threads can be shown with --number-of-sockets, --number-of-cores, and --number-of-threads.
* env_parallel now support mksh using env_parallel.mksh.
* GNU Parallel is distributed as part of Snippy https://github.com/tseemann/snippy
* GNU Parallel: Ejecutar comandos simultáneamente en Linux https://esgeeks.com/gnu-parallel-ejecutar-comandos-simultaneo-linux/
* Parallel download genomic data with GNU-Parallel https://digibio.blogspot.com/search/label/GNU-Parallel
<<Citation not OK: BAMClipper: removing primers from alignments to minimize false-negative mutations in amplicon next-generation sequencing https://www.nature.com/articles/s41598-017-01703-6>> <<Citation not OK: BAMClipper: removing primers from alignments to minimize false-negative mutations in amplicon next-generation sequencing https://www.nature.com/articles/s41598-017-01703-6>>

View file

@ -204,7 +204,7 @@ env_parallel() {
_error_PAR() { _error_PAR() {
echo "env_parallel: Error: $@" >&2 echo "env_parallel: Error: $@" >&2
} }
if _which_PAR parallel >/dev/null; then if _which_PAR parallel >/dev/null; then
true parallel found in path true parallel found in path
else else
@ -300,12 +300,12 @@ env_parallel() {
} }
parset() { parset() {
_parset_parallel_prg=parallel _parset_PARALLEL_PRG=parallel
_parset_main "$@" _parset_main "$@"
} }
env_parset() { env_parset() {
_parset_parallel_prg=env_parallel _parset_PARALLEL_PRG=env_parallel
_parset_main "$@" _parset_main "$@"
} }
@ -328,15 +328,22 @@ _parset_main() {
# parset "var_a4 var_b4 var_c4" echo ::: {1..3} # parset "var_a4 var_b4 var_c4" echo ::: {1..3}
# echo $var_c4 # echo $var_c4
_parset_name="$1" _make_TEMP() {
if [ "$_parset_name" = "" ] ; then # mktemp does not exist on some OS
perl -e 'use File::Temp qw(tempfile);
$ENV{"TMPDIR"} ||= "/tmp";
print((tempfile(DIR=>$ENV{"TMPDIR"}, TEMPLATE => "parXXXXX"))[1])'
}
_parset_NAME="$1"
if [ "$_parset_NAME" = "" ] ; then
echo parset: Error: No destination variable given. >&2 echo parset: Error: No destination variable given. >&2
echo parset: Error: Try: >&2 echo parset: Error: Try: >&2
echo parset: Error: ' ' parset myarray echo ::: foo bar >&2 echo parset: Error: ' ' parset myarray echo ::: foo bar >&2
return 255 return 255
fi fi
shift shift
echo "$_parset_name" | echo "$_parset_NAME" |
perl -ne 'chomp;for (split /[, ]/) { perl -ne 'chomp;for (split /[, ]/) {
# Allow: var_32 var[3] # Allow: var_32 var[3]
if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) { if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) {
@ -347,25 +354,30 @@ _parset_main() {
} }
exit $exitval; exit $exitval;
' || return 255 ' || return 255
if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then _exit_FILE=`_make_TEMP`
# $_parset_name contains , or space if perl -e 'exit not grep /,| /, @ARGV' "$_parset_NAME" ; then
# $_parset_NAME contains , or space
# Split on , or space to get the names # Split on , or space to get the names
eval "` eval "`
# Compute results into files # Compute results into files
$_parset_parallel_prg --files -k "$@" | ($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
# var1= cat tmpfile1; rm tmpfile1 # var1= cat tmpfile1; rm tmpfile1
# var2= cat tmpfile2; rm tmpfile2 # var2= cat tmpfile2; rm tmpfile2
parallel -q echo {2}='\`cat {1}; rm {1}\`' :::: - :::+ \` parallel -q echo {2}='\`cat {1}; rm {1}\`' :::: - :::+ \`
echo "$_parset_name" | echo "$_parset_NAME" |
perl -pe 's/,/ /g' perl -pe 's/,/ /g'
\` \`
`" `"
else else
# $_parset_name does not contain , or space # $_parset_NAME does not contain , or space
# => $_parset_name is the name of the array to put data into # => $_parset_NAME is the name of the array to put data into
# Supported in: bash zsh ksh # Supported in: bash zsh ksh mksh
# Arrays do not work in: ash dash # Arrays do not work in: sh ash dash
eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" | eval "$_parset_NAME=( $(
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )" # Compute results into files. Save exit value
($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "'
) )"
fi fi
return `cat "$_exit_FILE"; rm "$_exit_FILE"`
} }

View file

@ -300,12 +300,12 @@ env_parallel() {
} }
parset() { parset() {
_parset_parallel_prg=parallel _parset_PARALLEL_PRG=parallel
_parset_main "$@" _parset_main "$@"
} }
env_parset() { env_parset() {
_parset_parallel_prg=env_parallel _parset_PARALLEL_PRG=env_parallel
_parset_main "$@" _parset_main "$@"
} }
@ -328,15 +328,22 @@ _parset_main() {
# parset "var_a4 var_b4 var_c4" echo ::: {1..3} # parset "var_a4 var_b4 var_c4" echo ::: {1..3}
# echo $var_c4 # echo $var_c4
_parset_name="$1" _make_TEMP() {
if [ "$_parset_name" = "" ] ; then # mktemp does not exist on some OS
perl -e 'use File::Temp qw(tempfile);
$ENV{"TMPDIR"} ||= "/tmp";
print((tempfile(DIR=>$ENV{"TMPDIR"}, TEMPLATE => "parXXXXX"))[1])'
}
_parset_NAME="$1"
if [ "$_parset_NAME" = "" ] ; then
echo parset: Error: No destination variable given. >&2 echo parset: Error: No destination variable given. >&2
echo parset: Error: Try: >&2 echo parset: Error: Try: >&2
echo parset: Error: ' ' parset myarray echo ::: foo bar >&2 echo parset: Error: ' ' parset myarray echo ::: foo bar >&2
return 255 return 255
fi fi
shift shift
echo "$_parset_name" | echo "$_parset_NAME" |
perl -ne 'chomp;for (split /[, ]/) { perl -ne 'chomp;for (split /[, ]/) {
# Allow: var_32 var[3] # Allow: var_32 var[3]
if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) { if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) {
@ -347,25 +354,30 @@ _parset_main() {
} }
exit $exitval; exit $exitval;
' || return 255 ' || return 255
if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then _exit_FILE=`_make_TEMP`
# $_parset_name contains , or space if perl -e 'exit not grep /,| /, @ARGV' "$_parset_NAME" ; then
# $_parset_NAME contains , or space
# Split on , or space to get the names # Split on , or space to get the names
eval "$( eval "$(
# Compute results into files # Compute results into files
$_parset_parallel_prg --files -k "$@" | ($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
# var1=`cat tmpfile1; rm tmpfile1` # var1=`cat tmpfile1; rm tmpfile1`
# var2=`cat tmpfile2; rm tmpfile2` # var2=`cat tmpfile2; rm tmpfile2`
parallel -q echo {2}='`cat {1}; rm {1}`' :::: - :::+ $( parallel -q echo {2}='`cat {1}; rm {1}`' :::: - :::+ $(
echo "$_parset_name" | echo "$_parset_NAME" | perl -pe 's/,/ /g'
perl -pe 's/,/ /g'
) )
)" );
"
else else
# $_parset_name does not contain , or space # $_parset_NAME does not contain , or space
# => $_parset_name is the name of the array to put data into # => $_parset_NAME is the name of the array to put data into
# Supported in: bash zsh ksh # Supported in: bash zsh ksh mksh
# Arrays do not work in: ash dash # Arrays do not work in: sh ash dash
eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" | eval "$_parset_NAME=( $(
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )" # Compute results into files. Save exit value
($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "'
) )"
fi fi
return `cat "$_exit_FILE"; rm "$_exit_FILE"`
} }

View file

@ -55,7 +55,7 @@ else
# Deal with --env _ # Deal with --env _
cat <<'EOF' > $_tMpscRIpt cat <<'EOF' > $_tMpscRIpt
#!/usr/bin/perl #!/usr/bin/perl
for(@ARGV){ for(@ARGV){
$next_is_env and push @envvar, split/,/, $_; $next_is_env and push @envvar, split/,/, $_;
$next_is_env=/^--env$/; $next_is_env=/^--env$/;
@ -125,8 +125,8 @@ else
# Quoted: s/\^/\\001alias\ /\; # Quoted: s/\^/\\001alias\ /\;
alias | \ alias | \
perl -ne '/^'"$_grep_REGEXP"'/ or next; /^'"$_ignore_UNDERSCORE"'[^_a-zA-Z]/ and next; print' | \ perl -ne '/^'"$_grep_REGEXP"'/ or next; /^'"$_ignore_UNDERSCORE"'[^_a-zA-Z]/ and next; print' | \
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 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`"; setenv PARALLEL_ENV "`cat $_tMpaLLfILe; rm $_tMpaLLfILe`";
unset _tMpaLLfILe; unset _tMpaLLfILe;
# Use $PARALLEL set in calling alias # Use $PARALLEL set in calling alias

View file

@ -204,7 +204,7 @@ env_parallel() {
_error_PAR() { _error_PAR() {
echo "env_parallel: Error: $@" >&2 echo "env_parallel: Error: $@" >&2
} }
if _which_PAR parallel >/dev/null; then if _which_PAR parallel >/dev/null; then
true parallel found in path true parallel found in path
else else
@ -300,12 +300,12 @@ env_parallel() {
} }
parset() { parset() {
_parset_parallel_prg=parallel _parset_PARALLEL_PRG=parallel
_parset_main "$@" _parset_main "$@"
} }
env_parset() { env_parset() {
_parset_parallel_prg=env_parallel _parset_PARALLEL_PRG=env_parallel
_parset_main "$@" _parset_main "$@"
} }
@ -328,15 +328,22 @@ _parset_main() {
# parset "var_a4 var_b4 var_c4" echo ::: {1..3} # parset "var_a4 var_b4 var_c4" echo ::: {1..3}
# echo $var_c4 # echo $var_c4
_parset_name="$1" _make_TEMP() {
if [ "$_parset_name" = "" ] ; then # mktemp does not exist on some OS
perl -e 'use File::Temp qw(tempfile);
$ENV{"TMPDIR"} ||= "/tmp";
print((tempfile(DIR=>$ENV{"TMPDIR"}, TEMPLATE => "parXXXXX"))[1])'
}
_parset_NAME="$1"
if [ "$_parset_NAME" = "" ] ; then
echo parset: Error: No destination variable given. >&2 echo parset: Error: No destination variable given. >&2
echo parset: Error: Try: >&2 echo parset: Error: Try: >&2
echo parset: Error: ' ' parset myarray echo ::: foo bar >&2 echo parset: Error: ' ' parset myarray echo ::: foo bar >&2
return 255 return 255
fi fi
shift shift
echo "$_parset_name" | echo "$_parset_NAME" |
perl -ne 'chomp;for (split /[, ]/) { perl -ne 'chomp;for (split /[, ]/) {
# Allow: var_32 var[3] # Allow: var_32 var[3]
if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) { if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) {
@ -347,25 +354,30 @@ _parset_main() {
} }
exit $exitval; exit $exitval;
' || return 255 ' || return 255
if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then _exit_FILE=`_make_TEMP`
# $_parset_name contains , or space if perl -e 'exit not grep /,| /, @ARGV' "$_parset_NAME" ; then
# $_parset_NAME contains , or space
# Split on , or space to get the names # Split on , or space to get the names
eval "` eval "`
# Compute results into files # Compute results into files
$_parset_parallel_prg --files -k "$@" | ($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
# var1= cat tmpfile1; rm tmpfile1 # var1= cat tmpfile1; rm tmpfile1
# var2= cat tmpfile2; rm tmpfile2 # var2= cat tmpfile2; rm tmpfile2
parallel -q echo {2}='\`cat {1}; rm {1}\`' :::: - :::+ \` parallel -q echo {2}='\`cat {1}; rm {1}\`' :::: - :::+ \`
echo "$_parset_name" | echo "$_parset_NAME" |
perl -pe 's/,/ /g' perl -pe 's/,/ /g'
\` \`
`" `"
else else
# $_parset_name does not contain , or space # $_parset_NAME does not contain , or space
# => $_parset_name is the name of the array to put data into # => $_parset_NAME is the name of the array to put data into
# Supported in: bash zsh ksh # Supported in: bash zsh ksh mksh
# Arrays do not work in: ash dash # Arrays do not work in: sh ash dash
eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" | eval "$_parset_NAME=( $(
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )" # Compute results into files. Save exit value
($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "'
) )"
fi fi
return `cat "$_exit_FILE"; rm "$_exit_FILE"`
} }

View file

@ -118,7 +118,7 @@ function env_parallel
# Generate commands to set scalar variables # Generate commands to set scalar variables
# Keep the ones from --env # Keep the ones from --env
# Ignore the ones from ~/.parallel/ignored_vars # Ignore the ones from ~/.parallel/ignored_vars
# #
begin; begin;
for v in (set -n | \ for v in (set -n | \
grep -Ev '^(PARALLEL_TMP)$' | \ grep -Ev '^(PARALLEL_TMP)$' | \

View file

@ -48,7 +48,6 @@ env_parallel() {
typeset +p -f | perl -pe 's/\(\).*//' typeset +p -f | perl -pe 's/\(\).*//'
} }
_bodies_of_FUNCTIONS() { _bodies_of_FUNCTIONS() {
# typeset -f "$@"
functions "$@" functions "$@"
} }
_names_of_VARIABLES() { _names_of_VARIABLES() {
@ -284,12 +283,12 @@ env_parallel() {
} }
parset() { parset() {
_parset_parallel_prg=parallel _parset_PARALLEL_PRG=parallel
_parset_main "$@" _parset_main "$@"
} }
env_parset() { env_parset() {
_parset_parallel_prg=env_parallel _parset_PARALLEL_PRG=env_parallel
_parset_main "$@" _parset_main "$@"
} }
@ -312,15 +311,22 @@ _parset_main() {
# parset "var_a4 var_b4 var_c4" echo ::: {1..3} # parset "var_a4 var_b4 var_c4" echo ::: {1..3}
# echo $var_c4 # echo $var_c4
_parset_name="$1" _make_TEMP() {
if [ "$_parset_name" = "" ] ; then # mktemp does not exist on some OS
perl -e 'use File::Temp qw(tempfile);
$ENV{"TMPDIR"} ||= "/tmp";
print((tempfile(DIR=>$ENV{"TMPDIR"}, TEMPLATE => "parXXXXX"))[1])'
}
_parset_NAME="$1"
if [ "$_parset_NAME" = "" ] ; then
echo parset: Error: No destination variable given. >&2 echo parset: Error: No destination variable given. >&2
echo parset: Error: Try: >&2 echo parset: Error: Try: >&2
echo parset: Error: ' ' parset myarray echo ::: foo bar >&2 echo parset: Error: ' ' parset myarray echo ::: foo bar >&2
return 255 return 255
fi fi
shift shift
echo "$_parset_name" | echo "$_parset_NAME" |
perl -ne 'chomp;for (split /[, ]/) { perl -ne 'chomp;for (split /[, ]/) {
# Allow: var_32 var[3] # Allow: var_32 var[3]
if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) { if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) {
@ -331,25 +337,30 @@ _parset_main() {
} }
exit $exitval; exit $exitval;
' || return 255 ' || return 255
if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then _exit_FILE=`_make_TEMP`
# $_parset_name contains , or space if perl -e 'exit not grep /,| /, @ARGV' "$_parset_NAME" ; then
# $_parset_NAME contains , or space
# Split on , or space to get the names # Split on , or space to get the names
eval "` eval "$(
# Compute results into files # Compute results into files
$_parset_parallel_prg --files -k "$@" | ($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
# var1= cat tmpfile1; rm tmpfile1 # var1=`cat tmpfile1; rm tmpfile1`
# var2= cat tmpfile2; rm tmpfile2 # var2=`cat tmpfile2; rm tmpfile2`
parallel -q echo {2}='\`cat {1}; rm {1}\`' :::: - :::+ \` parallel -q echo {2}='`cat {1}; rm {1}`' :::: - :::+ $(
echo "$_parset_name" | echo "$_parset_NAME" | perl -pe 's/,/ /g'
perl -pe 's/,/ /g' )
\` );
`" "
else else
# $_parset_name does not contain , or space # $_parset_NAME does not contain , or space
# => $_parset_name is the name of the array to put data into # => $_parset_NAME is the name of the array to put data into
# Supported in: bash zsh ksh # Supported in: bash zsh ksh mksh
# Arrays do not work in: ash dash # Arrays do not work in: sh ash dash
eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" | eval "$_parset_NAME=( $(
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )" # Compute results into files. Save exit value
($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "'
) )"
fi fi
return `cat "$_exit_FILE"; rm "$_exit_FILE"`
} }

View file

@ -190,7 +190,7 @@ env_parallel() {
_error_PAR() { _error_PAR() {
echo "env_parallel: Error: $@" >&2 echo "env_parallel: Error: $@" >&2
} }
if _which_PAR parallel >/dev/null; then if _which_PAR parallel >/dev/null; then
true parallel found in path true parallel found in path
else else
@ -286,12 +286,12 @@ env_parallel() {
} }
parset() { parset() {
_parset_parallel_prg=parallel _parset_PARALLEL_PRG=parallel
_parset_main "$@" _parset_main "$@"
} }
env_parset() { env_parset() {
_parset_parallel_prg=env_parallel _parset_PARALLEL_PRG=env_parallel
_parset_main "$@" _parset_main "$@"
} }
@ -314,15 +314,22 @@ _parset_main() {
# parset "var_a4 var_b4 var_c4" echo ::: {1..3} # parset "var_a4 var_b4 var_c4" echo ::: {1..3}
# echo $var_c4 # echo $var_c4
_parset_name="$1" _make_TEMP() {
if [ "$_parset_name" = "" ] ; then # mktemp does not exist on some OS
perl -e 'use File::Temp qw(tempfile);
$ENV{"TMPDIR"} ||= "/tmp";
print((tempfile(DIR=>$ENV{"TMPDIR"}, TEMPLATE => "parXXXXX"))[1])'
}
_parset_NAME="$1"
if [ "$_parset_NAME" = "" ] ; then
echo parset: Error: No destination variable given. >&2 echo parset: Error: No destination variable given. >&2
echo parset: Error: Try: >&2 echo parset: Error: Try: >&2
echo parset: Error: ' ' parset myarray echo ::: foo bar >&2 echo parset: Error: ' ' parset myarray echo ::: foo bar >&2
return 255 return 255
fi fi
shift shift
echo "$_parset_name" | echo "$_parset_NAME" |
perl -ne 'chomp;for (split /[, ]/) { perl -ne 'chomp;for (split /[, ]/) {
# Allow: var_32 var[3] # Allow: var_32 var[3]
if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) { if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) {
@ -333,25 +340,30 @@ _parset_main() {
} }
exit $exitval; exit $exitval;
' || return 255 ' || return 255
if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then _exit_FILE=`_make_TEMP`
# $_parset_name contains , or space if perl -e 'exit not grep /,| /, @ARGV' "$_parset_NAME" ; then
# $_parset_NAME contains , or space
# Split on , or space to get the names # Split on , or space to get the names
eval "` eval "$(
# Compute results into files # Compute results into files
$_parset_parallel_prg --files -k "$@" | ($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
# var1= cat tmpfile1; rm tmpfile1 # var1=`cat tmpfile1; rm tmpfile1`
# var2= cat tmpfile2; rm tmpfile2 # var2=`cat tmpfile2; rm tmpfile2`
parallel -q echo {2}='\`cat {1}; rm {1}\`' :::: - :::+ \` parallel -q echo {2}='`cat {1}; rm {1}`' :::: - :::+ $(
echo "$_parset_name" | echo "$_parset_NAME" | perl -pe 's/,/ /g'
perl -pe 's/,/ /g' )
\` );
`" "
else else
# $_parset_name does not contain , or space # $_parset_NAME does not contain , or space
# => $_parset_name is the name of the array to put data into # => $_parset_NAME is the name of the array to put data into
# Supported in: bash zsh ksh mksh # Supported in: bash zsh ksh mksh
# Arrays do not work in: sh ash dash # Arrays do not work in: sh ash dash
eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" | eval "$_parset_NAME=( $(
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )" # Compute results into files. Save exit value
($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "'
) )"
fi fi
return `cat "$_exit_FILE"; rm "$_exit_FILE"`
} }

View file

@ -204,7 +204,7 @@ env_parallel() {
_error_PAR() { _error_PAR() {
echo "env_parallel: Error: $@" >&2 echo "env_parallel: Error: $@" >&2
} }
if _which_PAR parallel >/dev/null; then if _which_PAR parallel >/dev/null; then
true parallel found in path true parallel found in path
else else
@ -300,12 +300,12 @@ env_parallel() {
} }
parset() { parset() {
_parset_parallel_prg=parallel _parset_PARALLEL_PRG=parallel
_parset_main "$@" _parset_main "$@"
} }
env_parset() { env_parset() {
_parset_parallel_prg=env_parallel _parset_PARALLEL_PRG=env_parallel
_parset_main "$@" _parset_main "$@"
} }
@ -328,15 +328,22 @@ _parset_main() {
# parset "var_a4 var_b4 var_c4" echo ::: {1..3} # parset "var_a4 var_b4 var_c4" echo ::: {1..3}
# echo $var_c4 # echo $var_c4
_parset_name="$1" _make_TEMP() {
if [ "$_parset_name" = "" ] ; then # mktemp does not exist on some OS
perl -e 'use File::Temp qw(tempfile);
$ENV{"TMPDIR"} ||= "/tmp";
print((tempfile(DIR=>$ENV{"TMPDIR"}, TEMPLATE => "parXXXXX"))[1])'
}
_parset_NAME="$1"
if [ "$_parset_NAME" = "" ] ; then
echo parset: Error: No destination variable given. >&2 echo parset: Error: No destination variable given. >&2
echo parset: Error: Try: >&2 echo parset: Error: Try: >&2
echo parset: Error: ' ' parset myarray echo ::: foo bar >&2 echo parset: Error: ' ' parset myarray echo ::: foo bar >&2
return 255 return 255
fi fi
shift shift
echo "$_parset_name" | echo "$_parset_NAME" |
perl -ne 'chomp;for (split /[, ]/) { perl -ne 'chomp;for (split /[, ]/) {
# Allow: var_32 var[3] # Allow: var_32 var[3]
if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) { if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) {
@ -347,25 +354,30 @@ _parset_main() {
} }
exit $exitval; exit $exitval;
' || return 255 ' || return 255
if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then _exit_FILE=`_make_TEMP`
# $_parset_name contains , or space if perl -e 'exit not grep /,| /, @ARGV' "$_parset_NAME" ; then
# $_parset_NAME contains , or space
# Split on , or space to get the names # Split on , or space to get the names
eval "` eval "`
# Compute results into files # Compute results into files
$_parset_parallel_prg --files -k "$@" | ($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
# var1= cat tmpfile1; rm tmpfile1 # var1= cat tmpfile1; rm tmpfile1
# var2= cat tmpfile2; rm tmpfile2 # var2= cat tmpfile2; rm tmpfile2
parallel -q echo {2}='\`cat {1}; rm {1}\`' :::: - :::+ \` parallel -q echo {2}='\`cat {1}; rm {1}\`' :::: - :::+ \`
echo "$_parset_name" | echo "$_parset_NAME" |
perl -pe 's/,/ /g' perl -pe 's/,/ /g'
\` \`
`" `"
else else
# $_parset_name does not contain , or space # $_parset_NAME does not contain , or space
# => $_parset_name is the name of the array to put data into # => $_parset_NAME is the name of the array to put data into
# Supported in: bash zsh ksh # Supported in: bash zsh ksh mksh
# Arrays do not work in: ash dash # Arrays do not work in: sh ash dash
eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" | eval "$_parset_NAME=( $(
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )" # Compute results into files. Save exit value
($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "'
) )"
fi fi
return `cat "$_exit_FILE"; rm "$_exit_FILE"`
} }

View file

@ -181,7 +181,7 @@ env_parallel() {
_error_PAR() { _error_PAR() {
echo "env_parallel: Error: $@" >&2 echo "env_parallel: Error: $@" >&2
} }
if _which_PAR parallel >/dev/null; then if _which_PAR parallel >/dev/null; then
true parallel found in path true parallel found in path
else else
@ -277,12 +277,12 @@ env_parallel() {
} }
parset() { parset() {
_parset_parallel_prg=parallel _parset_PARALLEL_PRG=parallel
_parset_main "$@" _parset_main "$@"
} }
env_parset() { env_parset() {
_parset_parallel_prg=env_parallel _parset_PARALLEL_PRG=env_parallel
_parset_main "$@" _parset_main "$@"
} }
@ -305,15 +305,22 @@ _parset_main() {
# parset "var_a4 var_b4 var_c4" echo ::: {1..3} # parset "var_a4 var_b4 var_c4" echo ::: {1..3}
# echo $var_c4 # echo $var_c4
_parset_name="$1" _make_TEMP() {
if [ "$_parset_name" = "" ] ; then # mktemp does not exist on some OS
perl -e 'use File::Temp qw(tempfile);
$ENV{"TMPDIR"} ||= "/tmp";
print((tempfile(DIR=>$ENV{"TMPDIR"}, TEMPLATE => "parXXXXX"))[1])'
}
_parset_NAME="$1"
if [ "$_parset_NAME" = "" ] ; then
echo parset: Error: No destination variable given. >&2 echo parset: Error: No destination variable given. >&2
echo parset: Error: Try: >&2 echo parset: Error: Try: >&2
echo parset: Error: ' ' parset myarray echo ::: foo bar >&2 echo parset: Error: ' ' parset myarray echo ::: foo bar >&2
return 255 return 255
fi fi
shift shift
echo "$_parset_name" | echo "$_parset_NAME" |
perl -ne 'chomp;for (split /[, ]/) { perl -ne 'chomp;for (split /[, ]/) {
# Allow: var_32 var[3] # Allow: var_32 var[3]
if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) { if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) {
@ -324,25 +331,30 @@ _parset_main() {
} }
exit $exitval; exit $exitval;
' || return 255 ' || return 255
if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then _exit_FILE=`_make_TEMP`
# $_parset_name contains , or space if perl -e 'exit not grep /,| /, @ARGV' "$_parset_NAME" ; then
# $_parset_NAME contains , or space
# Split on , or space to get the names # Split on , or space to get the names
eval "` eval "$(
# Compute results into files # Compute results into files
$_parset_parallel_prg --files -k "$@" | ($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
# var1= cat tmpfile1; rm tmpfile1 # var1=`cat tmpfile1; rm tmpfile1`
# var2= cat tmpfile2; rm tmpfile2 # var2=`cat tmpfile2; rm tmpfile2`
parallel -q echo {2}='\`cat {1}; rm {1}\`' :::: - :::+ \` parallel -q echo {2}='`cat {1}; rm {1}`' :::: - :::+ $(
echo "$_parset_name" | echo "$_parset_NAME" | perl -pe 's/,/ /g'
perl -pe 's/,/ /g' )
\` );
`" "
else else
# $_parset_name does not contain , or space # $_parset_NAME does not contain , or space
# => $_parset_name is the name of the array to put data into # => $_parset_NAME is the name of the array to put data into
# Supported in: bash zsh ksh mksh # Supported in: bash zsh ksh mksh
# Arrays do not work in: sh ash dash # Arrays do not work in: sh ash dash
eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" | eval "$_parset_NAME=( $(
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )" # Compute results into files. Save exit value
($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "'
) )"
fi fi
return `cat "$_exit_FILE"; rm "$_exit_FILE"`
} }

View file

@ -36,7 +36,10 @@ run 1 second, suspend (3.00-1.00) seconds, run 1 second, suspend
=item B<--battery> =item B<--battery>
Suspend if the system is running on battery. Shorthand for: -l -1 --sensor 'cat /sys/class/power_supply/BAT0/status /proc/acpi/battery/BAT0/state 2>/dev/null |grep -i -q discharging; echo $?' Suspend if the system is running on battery. Shorthand for:
-l -1 --sensor 'cat /sys/class/power_supply/BAT0/status
/proc/acpi/battery/BAT0/state 2>/dev/null | grep -i -q discharging;
echo $?'
=item B<-f> I<FACTOR> =item B<-f> I<FACTOR>
@ -62,7 +65,7 @@ under the limits. The default is B<--soft>.
Limit for I/O. The amount of disk I/O will be computed as a value 0 - Limit for I/O. The amount of disk I/O will be computed as a value 0 -
10, where 0 is no I/O and 10 is at least one disk is 100% saturated. 10, where 0 is no I/O and 10 is at least one disk is 100% saturated.
B<--io> will set both B<--start-io> and B<run-io>. B<--io> will set both B<--start-io> and B<--run-io>.
=item B<--load> I<loadlimit> =item B<--load> I<loadlimit>
@ -71,7 +74,7 @@ B<--io> will set both B<--start-io> and B<run-io>.
Limit for load average. Limit for load average.
B<--load> will set both B<--start-load> and B<run-load>. B<--load> will set both B<--start-load> and B<--run-load>.
=item B<--mem> I<memlimit> =item B<--mem> I<memlimit>
@ -87,7 +90,7 @@ I<memlimit> can be postfixed with K, M, G, T, or P which would
multiply the size with 1024, 1048576, 1073741824, or 1099511627776 multiply the size with 1024, 1048576, 1073741824, or 1099511627776
respectively. respectively.
B<--mem> will set both B<--start-mem> and B<run-mem>. B<--mem> will set both B<--start-mem> and B<--run-mem>.
=item B<--noswap> =item B<--noswap>
@ -99,7 +102,7 @@ indication that the system is memory stressed.
B<--noswap> is over limit if the system is swapping both in and out. B<--noswap> is over limit if the system is swapping both in and out.
B<--noswap> will set both B<--start-noswap> and B<run-noswap>. B<--noswap> will set both B<--start-noswap> and B<--run-noswap>.
=item B<--net> =item B<--net>
@ -251,18 +254,19 @@ CPU. When the load rises to 1.0 the process is suspended.
=head1 EXAMPLE: Run updatedb =head1 EXAMPLE: Run updatedb
Running updatedb can often starve the system for disk I/O and thus result in a high load. Running B<updatedb> can often starve the system for disk I/O and thus result in a high load.
Run updatedb but suspend updatedb if the load is above 2.00: Run B<updatedb> but suspend B<updatedb> if the load is above 2.00:
B<niceload -L 2 updatedb> B<niceload -L 2 updatedb>
=head1 EXAMPLE: Run rsync =head1 EXAMPLE: Run rsync
rsync can just like updatedb starve the system for disk I/O and thus result in a high load. B<rsync> can, just like B<updatedb>, starve the system for disk I/O
and thus result in a high load.
Run rsync but keep load below 3.4. If load reaches 7 sleep for Run B<rsync> but keep load below 3.4. If load reaches 7 sleep for
(7-3.4)*12 seconds: (7-3.4)*12 seconds:
B<niceload -L 3.4 -f 12 rsync -Ha /home/ /backup/home/> B<niceload -L 3.4 -f 12 rsync -Ha /home/ /backup/home/>

View file

@ -1891,7 +1891,7 @@ sub open_joblog {
$/ = "\0"; $/ = "\0";
} }
# Replace \0 with '\n' as used in print_joblog() # Replace \0 with '\n' as used in print_joblog()
print $outfh map { s/\0/\n/g; $_,$/ } @group; print $outfh map { s/\0/\n/g; $_,$/ } map { $_ } @group;
seek $outfh, 0, 0; seek $outfh, 0, 0;
exit_if_disk_full(); exit_if_disk_full();
# Set filehandle to -a # Set filehandle to -a
@ -6760,9 +6760,10 @@ sub sct_aix() {
close $in_fh; close $in_fh;
} }
} }
$cpu->{'sockets'} ||= $cpu->{'cores'};
if(grep { /\d/ } values %$cpu) { if(grep { /\d/ } values %$cpu) {
# BUG It is not not known how to calculate this
$cpu->{'sockets'} = 1;
return $cpu; return $cpu;
} else { } else {
return undef; return undef;
@ -6779,10 +6780,13 @@ sub sct_hpux() {
my $cpu; my $cpu;
$cpu->{'cores'} = $cpu->{'cores'} =
::qqx(qq{ /usr/bin/mpsched -s 2>&1 | grep 'Locality Domain Count' | awk '{ print \$4 }'}); ::qqx(qq{ /usr/bin/mpsched -s 2>&1 | grep 'Locality Domain Count' | awk '{ print \$4 }'});
chomp($cpu->{'cores'});
$cpu->{'threads'} = $cpu->{'threads'} =
::qqx(qq{ /usr/bin/mpsched -s 2>&1 | perl -ne '/Processor Count\\D+(\\d+)/ and print "\$1\n"'}); ::qqx(qq{ /usr/bin/mpsched -s 2>&1 | perl -ne '/Processor Count\\D+(\\d+)/ and print "\$1"'});
if(grep { /\d/ } values %$cpu) { if(grep { /\d/ } values %$cpu) {
# BUG It is not not known how to calculate this
$cpu->{'sockets'} = 1;
return $cpu; return $cpu;
} else { } else {
return undef; return undef;

View file

@ -4,21 +4,23 @@
=head1 NAME =head1 NAME
parallel - build and execute shell command lines from standard input in parallel parallel - build and execute shell command lines from standard input
in parallel
=head1 SYNOPSIS =head1 SYNOPSIS
B<parallel> [options] [I<command> [arguments]] < list_of_arguments B<parallel> [options] [I<command> [arguments]] < list_of_arguments
B<parallel> [options] [I<command> [arguments]] ( B<:::> arguments | B<:::+> arguments | B<parallel> [options] [I<command> [arguments]] ( B<:::> arguments |
B<::::> argfile(s) | B<::::+> argfile(s) ) ... B<:::+> arguments | B<::::> argfile(s) | B<::::+> argfile(s) ) ...
B<parallel> --semaphore [options] I<command> B<parallel> --semaphore [options] I<command>
B<#!/usr/bin/parallel> --shebang [options] [I<command> [arguments]] B<#!/usr/bin/parallel> --shebang [options] [I<command> [arguments]]
B<#!/usr/bin/parallel> --shebang-wrap [options] [I<command> [arguments]] B<#!/usr/bin/parallel> --shebang-wrap [options] [I<command>
[arguments]]
=head1 DESCRIPTION =head1 DESCRIPTION
@ -118,7 +120,7 @@ replacement string; then the string is not quoted.
Input line without extension. This replacement string will be replaced Input line without extension. This replacement string will be replaced
by the input with the extension removed. If the input line contains by the input with the extension removed. If the input line contains
B<.> after the last B</> the last B<.> till the end of the string will B<.> after the last B</>, the last B<.> until the end of the string will
be removed and B<{.}> will be replaced with the be removed and B<{.}> will be replaced with the
remaining. E.g. I<foo.jpg> becomes I<foo>, I<subdir/foo.jpg> becomes remaining. E.g. I<foo.jpg> becomes I<foo>, I<subdir/foo.jpg> becomes
I<subdir/foo>, I<sub.dir/foo.jpg> becomes I<sub.dir/foo>, I<subdir/foo>, I<sub.dir/foo.jpg> becomes I<sub.dir/foo>,
@ -659,7 +661,7 @@ equivalent: B<--delay 100000> and B<--delay 1d3.5h16.6m4s>.
Print the job to run on stdout (standard output), but do not run the Print the job to run on stdout (standard output), but do not run the
job. Use B<-v -v> to include the wrapping that GNU Parallel generates job. Use B<-v -v> to include the wrapping that GNU Parallel generates
(for remote jobs, B<--tmux>, B<--nice>, B<--pipe>, B<--pipepart>, (for remote jobs, B<--tmux>, B<--nice>, B<--pipe>, B<--pipepart>,
B<--fifo> and B<--cat>). Do not count on this literaly, though, as the B<--fifo> and B<--cat>). Do not count on this literally, though, as the
job may be scheduled on another computer or the local computer if : is job may be scheduled on another computer or the local computer if : is
in the list. in the list.
@ -773,7 +775,7 @@ may not be used. B<--gnu> is kept for compatibility.
=item B<--group> =item B<--group>
Group output. Output from each job is grouped together and is only Group output. Output from each job is grouped together and is only
printed when the command is finished. stdout (standard output) first printed when the command is finished. Stdout (standard output) first
followed by stderr (standard error). followed by stderr (standard error).
This takes in the order of 0.5ms per job and depends on the speed of This takes in the order of 0.5ms per job and depends on the speed of
@ -855,7 +857,7 @@ exit when 3% of the jobs have finished. Kill running jobs.
=back =back
For backwards compability these also work: For backwards compatibility these also work:
=over 12 =over 12
@ -3052,11 +3054,11 @@ B<{=> and B<=}> mark a perl expression. B<pQ> perl-quotes the
string. B<date +%FT%T> is the date in ISO8601 with time. string. B<date +%FT%T> is the date in ISO8601 with time.
=head1 EXAMPLE: Digtal clock with "blinking" : =head1 EXAMPLE: Digital clock with "blinking" :
The : in a digital clock blinks. To make every other line have a ':' The : in a digital clock blinks. To make every other line have a ':'
and the rest a ' ' a perl expression is used to look at the 3rd input and the rest a ' ' a perl expression is used to look at the 3rd input
source. If the value modudo 2 is 1: Use ":" otherwise use " ": source. If the value modulo 2 is 1: Use ":" otherwise use " ":
parallel -k echo {1}'{=3 $_=$_%2?":":" "=}'{2}{3} \ parallel -k echo {1}'{=3 $_=$_%2?":":" "=}'{2}{3} \
::: {0..12} ::: {0..5} ::: {0..9} ::: {0..12} ::: {0..5} ::: {0..9}

View file

@ -205,7 +205,7 @@ composed commands and redirection require using B<bash -c>.
ls | parallel "wc {} >{}.wc" ls | parallel "wc {} >{}.wc"
ls | parallel "echo {}; ls {}|wc" ls | parallel "echo {}; ls {}|wc"
becomes (assuming you have 8 cores and that none of the file names becomes (assuming you have 8 cores and that none of the filenames
contain space, " or '). contain space, " or ').
ls | xargs -d "\n" -P8 -I {} bash -c "wc {} >{}.wc" ls | xargs -d "\n" -P8 -I {} bash -c "wc {} >{}.wc"
@ -216,9 +216,9 @@ https://www.gnu.org/software/findutils/
=head2 DIFFERENCES BETWEEN find -exec AND GNU Parallel =head2 DIFFERENCES BETWEEN find -exec AND GNU Parallel
B<find -exec> offer some of the same possibilities as GNU B<parallel>. B<find -exec> offers some of the same possibilities as GNU B<parallel>.
B<find -exec> only works on files. So processing other input (such as B<find -exec> only works on files. Processing other input (such as
hosts or URLs) will require creating these inputs as files. B<find hosts or URLs) will require creating these inputs as files. B<find
-exec> has no support for running commands in parallel. -exec> has no support for running commands in parallel.
@ -228,13 +228,13 @@ https://www.gnu.org/software/findutils/
=head2 DIFFERENCES BETWEEN make -j AND GNU Parallel =head2 DIFFERENCES BETWEEN make -j AND GNU Parallel
B<make -j> can run jobs in parallel, but requires a crafted Makefile B<make -j> can run jobs in parallel, but requires a crafted Makefile
to do this. That results in extra quoting to get filename containing to do this. That results in extra quoting to get filenames containing
newline to work correctly. newlines to work correctly.
B<make -j> computes a dependency graph before running jobs. Jobs run B<make -j> computes a dependency graph before running jobs. Jobs run
by GNU B<parallel> does not depend on eachother. by GNU B<parallel> does not depend on each other.
(Very early versions of GNU B<parallel> were coincidently implemented (Very early versions of GNU B<parallel> were coincidentally implemented
using B<make -j>). using B<make -j>).
https://www.gnu.org/software/make/ https://www.gnu.org/software/make/
@ -250,10 +250,10 @@ into files.
The argument replace string ($ITEM) cannot be changed. Arguments must The argument replace string ($ITEM) cannot be changed. Arguments must
be quoted - thus arguments containing special characters (space '"&!*) be quoted - thus arguments containing special characters (space '"&!*)
may cause problems. More than one argument is not supported. File may cause problems. More than one argument is not supported. Filenames
names containing newlines are not processed correctly. When reading containing newlines are not processed correctly. When reading input
input from a file null cannot be used as a terminator. B<ppss> needs from a file null cannot be used as a terminator. B<ppss> needs to read
to read the whole input file before starting any jobs. the whole input file before starting any jobs.
Output and status information is stored in ppss_dir and thus requires Output and status information is stored in ppss_dir and thus requires
cleanup when completed. If the dir is not removed before running cleanup when completed. If the dir is not removed before running
@ -615,7 +615,7 @@ https://github.com/cheusov/paexec
B<map> sees it as a feature to have less features and in doing so it B<map> sees it as a feature to have less features and in doing so it
also handles corner cases incorrectly. A lot of GNU B<parallel>'s code also handles corner cases incorrectly. A lot of GNU B<parallel>'s code
is to handle corner cases correctly on every platform, so you will not is to handle corner cases correctly on every platform, so you will not
get a nasty surprise if a user for example saves a file called: I<My get a nasty surprise if a user, for example, saves a file called: I<My
brother's 12" records.txt> brother's 12" records.txt>
B<map>'s example showing how to deal with special characters fails on B<map>'s example showing how to deal with special characters fails on
@ -756,7 +756,7 @@ B<jobflow> can run multiple jobs in parallel.
Just like B<xargs> output from B<jobflow> jobs running in parallel mix Just like B<xargs> output from B<jobflow> jobs running in parallel mix
together by default. B<jobflow> can buffer into files (placed in together by default. B<jobflow> can buffer into files (placed in
/run/shm), but these are not cleaned up - not even if B<jobflow> dies /run/shm), but these are not cleaned up - not even if B<jobflow> dies
unexpectently. If the total output is big (in the order of RAM+swap) unexpectedly. If the total output is big (in the order of RAM+swap)
it can cause the system to run out of memory. it can cause the system to run out of memory.
B<jobflow> gives no error if the command is unknown, and like B<xargs> B<jobflow> gives no error if the command is unknown, and like B<xargs>
@ -897,7 +897,7 @@ These do something different from GNU B<parallel>
Rust parallel has no remote facilities. Rust parallel has no remote facilities.
It uses /tmp/parallel for tmp files and does not clean up if It uses /tmp/parallel for tmp files and does not clean up if
terminated abrubtly. If another user on the system uses Rust parallel, terminated abruptly. If another user on the system uses Rust parallel,
then /tmp/parallel will have the wrong permissions and Rust parallel then /tmp/parallel will have the wrong permissions and Rust parallel
will fail. A malicious user can setup the right permissions and will fail. A malicious user can setup the right permissions and
symlink the output file to one of the user's files and next time the symlink the output file to one of the user's files and next time the
@ -1112,7 +1112,7 @@ B<15. Interrupt jobs by `Ctrl-C`, rush will stop unfinished commands and exit.>
^C ^C
B<16. Continue/resume jobs (`-c`). When some jobs failed (by B<16. Continue/resume jobs (`-c`). When some jobs failed (by
execution failure, timeout, or cancelling by user with `Ctrl + C`), execution failure, timeout, or canceling by user with `Ctrl + C`),
please switch flag `-c/--continue` on and run again, so that `rush` please switch flag `-c/--continue` on and run again, so that `rush`
can save successful commands and ignore them in I<NEXT> run.> can save successful commands and ignore them in I<NEXT> run.>
@ -1144,7 +1144,7 @@ Multi-line jobs:
B<17. A comprehensive example: downloading 1K+ pages given by B<17. A comprehensive example: downloading 1K+ pages given by
three URL list files using `phantomjs save_page.js` (some page three URL list files using `phantomjs save_page.js` (some page
contents are dynamicly generated by Javascript, so `wget` does not contents are dynamically generated by Javascript, so `wget` does not
work). Here I set max jobs number (`-j`) as `20`, each job has a max work). Here I set max jobs number (`-j`) as `20`, each job has a max
running time (`-t`) of `60` seconds and `3` retry changes running time (`-t`) of `60` seconds and `3` retry changes
(`-r`). Continue flag `-c` is also switched on, so we can continue (`-r`). Continue flag `-c` is also switched on, so we can continue
@ -1298,7 +1298,7 @@ double space, ' and ":
=item * Commands of multi-lines =item * Commands of multi-lines
While you I<can> use multi-lined commands in GNU B<parallel>, to While you I<can> use multi-lined commands in GNU B<parallel>, to
improve readibilty GNU B<parallel> discourages the use of multi-line improve readability GNU B<parallel> discourages the use of multi-line
commands. In most cases it can be written as a function: commands. In most cases it can be written as a function:
seq 1 3 | seq 1 3 |
@ -1376,7 +1376,7 @@ It can be emulated with GNU B<parallel> using this Bash function:
parallel $(_cmds "$@")'|| echo exit status $?' ::: */ parallel $(_cmds "$@")'|| echo exit status $?' ::: */
} }
This works execpt for the B<--exclude> option. This works except for the B<--exclude> option.
=head2 DIFFERENCES BETWEEN pyargs AND GNU Parallel =head2 DIFFERENCES BETWEEN pyargs AND GNU Parallel
@ -1432,7 +1432,7 @@ The output is prepended with the job number, and may be incomplete:
7165 7165
When pretty printing it caches output in memory. Output mixes by using When pretty printing it caches output in memory. Output mixes by using
test MIX below wether or not output is cached. test MIX below whether or not output is cached.
There seems to be no way of making a template command and have There seems to be no way of making a template command and have
B<concurrently> fill that with different args. The full commands must B<concurrently> fill that with different args. The full commands must
@ -1457,7 +1457,7 @@ B<map> itself, the output also mixes:
seq 10 | map i 'echo start-$i && sleep 0.$i && echo end-$i &' seq 10 | map i 'echo start-$i && sleep 0.$i && echo end-$i &'
The major difference is that GNU B<parallel> is build for parallelization The major difference is that GNU B<parallel> is built for parallelization
and map is not. So GNU B<parallel> has lots of ways of dealing with the and map is not. So GNU B<parallel> has lots of ways of dealing with the
issues that parallelization raises: issues that parallelization raises:
@ -1490,7 +1490,7 @@ Here are the 5 examples converted to GNU Parallel:
4$ printf "1\n1\n1\n" | map t 'sleep $t && say done' 4$ printf "1\n1\n1\n" | map t 'sleep $t && say done'
4$ printf "1\n1\n1\n" | parallel 'sleep {} && say done' 4$ printf "1\n1\n1\n" | parallel 'sleep {} && say done'
4$ paralllel 'sleep {} && say done' ::: 1 1 1 4$ parallel 'sleep {} && say done' ::: 1 1 1
5$ printf "1\n1\n1\n" | map t 'sleep $t && say done &' 5$ printf "1\n1\n1\n" | map t 'sleep $t && say done &'
5$ printf "1\n1\n1\n" | parallel -j0 'sleep {} && say done' 5$ printf "1\n1\n1\n" | parallel -j0 'sleep {} && say done'

View file

@ -15,7 +15,7 @@ situations, and to avoid overloading you with information, the most
used features are presented first. used features are presented first.
All the examples are tested in Bash, and most will work in other All the examples are tested in Bash, and most will work in other
shells, too, but there are a few exceptions. So you are recommened to shells, too, but there are a few exceptions. So you are recommended to
use Bash while testing out the examples. use Bash while testing out the examples.
@ -209,8 +209,8 @@ If the input is B<mydir/mysubdir/myfile.myext> then:
{#} = the sequence number of the job {#} = the sequence number of the job
{%} = the job slot number {%} = the job slot number
When a job is started it gets sequence number that starts at 1 and When a job is started it gets a sequence number that starts at 1 and
increases with 1 for each new job. The job also gets assigned a slot increases by 1 for each new job. The job also gets assigned a slot
number. This number is from 1 to the number of jobs running in number. This number is from 1 to the number of jobs running in
parallel. It is unique between the running jobs, but is re-used as parallel. It is unique between the running jobs, but is re-used as
soon as a job finishes. soon as a job finishes.
@ -349,7 +349,7 @@ A shorthand for B<--transfer --return {} --cleanup> is B<--trc {}>.
=head1 Advanced usage =head1 Advanced usage
parset fifo, cmd substtition, arrayelements, array with var names and cmds, env_parset parset fifo, cmd substitution, arrayelements, array with var names and cmds, env_parset
env_parallel env_parallel
@ -382,11 +382,11 @@ Interfacing with HTML/?
=head2 Remote execution =head2 Remote execution
seq 10 | parallel --sshlogin 'ssh -i "key.pem" a@b.com' echo seq 10 | parallel --sshlogin 'ssh -i "key.pem" a@b.com' echo
seq 10 | PARALLLEL_SSH='ssh -i "key.pem"' parallel --sshlogin a@b.com echo seq 10 | PARALLEL_SSH='ssh -i "key.pem"' parallel --sshlogin a@b.com echo
seq 10 | parallel --ssh 'ssh -i "key.pem"' --sshlogin a@b.com echo seq 10 | parallel --ssh 'ssh -i "key.pem"' --sshlogin a@b.com echo
ssh-agent ssh-agent

View file

@ -213,10 +213,10 @@ error (stderr).
GNU B<parallel> pipes output from the command run into the compression GNU B<parallel> pipes output from the command run into the compression
program which saves to a tmpfile. GNU B<parallel> records the pid of program which saves to a tmpfile. GNU B<parallel> records the pid of
the compress program. At the same time a small perl script (called the compress program. At the same time a small Perl script (called
B<cattail> above) is started: It basically does B<cat> followed by B<cattail> above) is started: It basically does B<cat> followed by
B<tail -f>, but it also removes the tmpfile as soon as the first byte B<tail -f>, but it also removes the tmpfile as soon as the first byte
is read, and it continously checks if the pid of the compression is read, and it continuously checks if the pid of the compression
program is dead. If the compress program is dead, B<cattail> reads the program is dead. If the compress program is dead, B<cattail> reads the
rest of tmpfile and exits. rest of tmpfile and exits.
@ -539,7 +539,7 @@ needs to know how to read the function.
From version 20150122 GNU B<parallel> tries both the ()-version and From version 20150122 GNU B<parallel> tries both the ()-version and
the %%-version, and the function definition works on both pre- and the %%-version, and the function definition works on both pre- and
post-shellshock versions of B<bash>. post-shell shock versions of B<bash>.
=head2 The remote system wrapper =head2 The remote system wrapper
@ -1183,7 +1183,7 @@ software, username, password, host, port, database, and table in a
single string. single string.
The DBURL must point to a table name. The table will be dropped and The DBURL must point to a table name. The table will be dropped and
created. The reason for not reusing an exising table is that the user created. The reason for not reusing an existing table is that the user
may have added more input sources which would require more columns in may have added more input sources which would require more columns in
the table. By prepending '+' to the DBURL the table will not be the table. By prepending '+' to the DBURL the table will not be
dropped. dropped.
@ -1239,7 +1239,7 @@ instead? See a list in: B<man parallel_alternatives>.
=head2 Multiple processes working together =head2 Multiple processes working together
Open3 is slow. Printing is slow. It would be good if they did not tie Open3 is slow. Printing is slow. It would be good if they did not tie
up ressources, but were run in separate threads. up resources, but were run in separate threads.
=head2 --rrs on remote using a perl wrapper =head2 --rrs on remote using a perl wrapper

View file

@ -2906,7 +2906,7 @@ Output:
=head2 Timeout =head2 Timeout
With B<--semaphoretimeout> you can force running the command anyway after With B<--semaphoretimeout> you can force running the command anyway after
a period (postive number) or give up (negative number): a period (positive number) or give up (negative number):
sem --id foo -u 'echo Slow started; sleep 5; echo Slow ended' && sem --id foo -u 'echo Slow started; sleep 5; echo Slow ended' &&
sem --id foo --semaphoretimeout 1 'echo Forced running after 1 sec' && sem --id foo --semaphoretimeout 1 'echo Forced running after 1 sec' &&

View file

@ -9,6 +9,9 @@ ping -c 1 freebsd7.tange.dk >/dev/null 2>&1
ssh freebsd7.tange.dk touch .parallel/will-cite ssh freebsd7.tange.dk touch .parallel/will-cite
scp -q .*/src/{parallel,sem,sql,niceload,env_parallel*} freebsd7.tange.dk:bin/ scp -q .*/src/{parallel,sem,sql,niceload,env_parallel*} freebsd7.tange.dk:bin/
. `which env_parallel.bash`
env_parallel --session
par_no_more_procs() { par_no_more_procs() {
echo 'bug #40136: FreeBSD: No more processes' echo 'bug #40136: FreeBSD: No more processes'
sem --jobs 3 --id my_id -u 'echo First started; sleep 10; echo The first finished;echo' && sem --jobs 3 --id my_id -u 'echo First started; sleep 10; echo The first finished;echo' &&
@ -59,17 +62,17 @@ par_shebang() {
} }
par_shellshock_bug() { par_shellshock_bug() {
bash -c 'echo bug \#43358: shellshock breaks exporting functions using --env _; bash -c 'echo bug \#43358: shellshock breaks exporting functions using --env name;
echo Non-shellshock-hardened to non-shellshock-hardened; echo Non-shellshock-hardened to non-shellshock-hardened;
funky() { echo Function $1; }; funky() { echo Function $1; };
export -f funky; export -f funky;
PARALLEL_SHELL=bash parallel --env funky -S localhost funky ::: non-shellshock-hardened' PARALLEL_SHELL=bash parallel --env funky -S localhost funky ::: non-shellshock-hardened'
bash -c 'echo bug \#43358: shellshock breaks exporting functions using --env _; bash -c 'echo bug \#43358: shellshock breaks exporting functions using --env name;
echo Non-shellshock-hardened to shellshock-hardened; echo Non-shellshock-hardened to shellshock-hardened;
funky() { echo Function $1; }; funky() { echo Function $1; };
export -f funky; export -f funky;
parallel --env funky -S parallel@192.168.1.72 funky ::: shellshock-hardened' PARALLEL_SHELL=bash parallel --env funky -S parallel@192.168.1.72 funky ::: shellshock-hardened'
} }
par_load() { par_load() {
@ -104,7 +107,7 @@ unset TMPDIR
# we get 'shopt'-errors and 'declare'-errors. # we get 'shopt'-errors and 'declare'-errors.
# We can safely ignore those. # We can safely ignore those.
env_parallel --env _ -vj9 -k --joblog /tmp/jl-`basename $0` --retries 3 \ PARALLEL_SHELL=sh env_parallel --env _ -vj9 -k --joblog /tmp/jl-`basename $0` --retries 3 \
-S freebsd7.tange.dk --tag '{} 2>&1' \ -S freebsd7.tange.dk --tag '{} 2>&1' \
::: $(compgen -A function | grep par_ | sort) \ ::: $(compgen -A function | grep par_ | sort) \
2> >(grep -Ev 'shopt: not found|declare: not found') 2> >(grep -Ev 'shopt: not found|declare: not found')

View file

@ -24,6 +24,7 @@ par_exit_code() {
OK="ash bash csh dash fish mksh posh rc sash sh static-sh tcsh" OK="ash bash csh dash fish mksh posh rc sash sh static-sh tcsh"
BAD="fdsh fizsh ksh ksh93 yash zsh" BAD="fdsh fizsh ksh ksh93 yash zsh"
s=100 s=100
rm -f /tmp/mysleep
cp /bin/sleep /tmp/mysleep cp /bin/sleep /tmp/mysleep
echo '# Ideally the command should return the same' echo '# Ideally the command should return the same'

View file

@ -197,13 +197,13 @@ par_parcat_mixing() {
slow_output() { slow_output() {
string=$1 string=$1
perl -e 'print "'$string'"x9000,"start\n"' perl -e 'print "'$string'"x9000,"start\n"'
sleep 4 sleep 6
perl -e 'print "'$string'"x9000,"end\n"' perl -e 'print "'$string'"x9000,"end\n"'
} }
tmp1=$(mktmpfifo) tmp1=$(mktmpfifo)
tmp2=$(mktmpfifo) tmp2=$(mktmpfifo)
slow_output a > $tmp1 & slow_output a > $tmp1 &
sleep 2 sleep 3
slow_output b > $tmp2 & slow_output b > $tmp2 &
parcat $tmp1 $tmp2 | tr -s ab parcat $tmp1 $tmp2 | tr -s ab
} }

View file

@ -120,8 +120,11 @@ par_empty() {
true; true;
} }
hostname=`hostname`
export -f $(compgen -A function | egrep 'p_|par_') export -f $(compgen -A function | egrep 'p_|par_')
# Tested that -j0 in parallel is fastest (up to 15 jobs) # Tested that -j0 in parallel is fastest (up to 15 jobs)
compgen -A function | grep par_ | sort | compgen -A function | grep par_ | sort |
stdout parallel -vj5 -k --tag --joblog /tmp/jl-`basename $0` p_wrapper \ stdout parallel -vj5 -k --tag --joblog /tmp/jl-`basename $0` p_wrapper \
:::: - ::: \$MYSQL \$PG \$SQLITE | perl -pe 's/tbl\d+/TBL99999/gi' :::: - ::: \$MYSQL \$PG \$SQLITE | perl -pe 's/tbl\d+/TBL99999/gi;' |
perl -pe 's/(from TBL99999 order) .*/$1/g' |
perl -pe "s/$hostname/hostname/g"

View file

@ -2032,6 +2032,10 @@ par_ash_parset() {
# env_parset 'myarray[6],myarray[5],myarray[4]' myfun ::: baz bar foo # env_parset 'myarray[6],myarray[5],myarray[4]' myfun ::: baz bar foo
# echo "${myarray[*]}" # echo "${myarray[*]}"
# echo "${myarray[4]} ${myarray[5]} ${myarray[6]}" # echo "${myarray[4]} ${myarray[5]} ${myarray[6]}"
parset a,b,c 'echo {};exit {}' ::: 0 1 1 0
echo Exit value 2 = $?
env_parset a,b,c 'echo {};exit {}' ::: 0 1 1 0
echo Exit value 2 = $?
_EOF _EOF
) )
ssh ash@lo "$myscript" ssh ash@lo "$myscript"
@ -2086,6 +2090,10 @@ par_bash_parset() {
env_parset 'myarray[6],myarray[5],myarray[4]' myfun ::: baz bar foo env_parset 'myarray[6],myarray[5],myarray[4]' myfun ::: baz bar foo
echo "${myarray[*]}" echo "${myarray[*]}"
echo "${myarray[4]} ${myarray[5]} ${myarray[6]}" echo "${myarray[4]} ${myarray[5]} ${myarray[6]}"
parset a,b,c 'echo {};exit {}' ::: 0 1 1 0
echo Exit value 2 = $?
env_parset a,b,c 'echo {};exit {}' ::: 0 1 1 0
echo Exit value 2 = $?
_EOF _EOF
) )
ssh bash@lo "$myscript" ssh bash@lo "$myscript"
@ -2149,6 +2157,10 @@ par_dash_parset() {
# env_parset 'myarray[6],myarray[5],myarray[4]' myfun ::: baz bar foo # env_parset 'myarray[6],myarray[5],myarray[4]' myfun ::: baz bar foo
# echo "${myarray[*]}" # echo "${myarray[*]}"
# echo "${myarray[4]} ${myarray[5]} ${myarray[6]}" # echo "${myarray[4]} ${myarray[5]} ${myarray[6]}"
parset a,b,c 'echo {};exit {}' ::: 0 1 1 0
echo Exit value 2 = $?
env_parset a,b,c 'echo {};exit {}' ::: 0 1 1 0
echo Exit value 2 = $?
_EOF _EOF
) )
ssh dash@lo "$myscript" ssh dash@lo "$myscript"
@ -2207,6 +2219,10 @@ par_ksh_parset() {
env_parset 'myarray[6],myarray[5],myarray[4]' myfun ::: baz bar foo env_parset 'myarray[6],myarray[5],myarray[4]' myfun ::: baz bar foo
echo "${myarray[*]}" echo "${myarray[*]}"
echo "${myarray[4]} ${myarray[5]} ${myarray[6]}" echo "${myarray[4]} ${myarray[5]} ${myarray[6]}"
parset a,b,c 'echo {};exit {}' ::: 0 1 1 0
echo Exit value 2 = $?
env_parset a,b,c 'echo {};exit {}' ::: 0 1 1 0
echo Exit value 2 = $?
_EOF _EOF
) )
ssh ksh@lo "$myscript" ssh ksh@lo "$myscript"
@ -2261,6 +2277,10 @@ par_mksh_parset() {
env_parset 'myarray[6],myarray[5],myarray[4]' myfun ::: baz bar foo env_parset 'myarray[6],myarray[5],myarray[4]' myfun ::: baz bar foo
echo "${myarray[*]}" echo "${myarray[*]}"
echo "${myarray[4]} ${myarray[5]} ${myarray[6]}" echo "${myarray[4]} ${myarray[5]} ${myarray[6]}"
parset a,b,c 'echo {};exit {}' ::: 0 1 1 0
echo Exit value 2 = $?
env_parset a,b,c 'echo {};exit {}' ::: 0 1 1 0
echo Exit value 2 = $?
_EOF _EOF
) )
ssh mksh@lo "$myscript" ssh mksh@lo "$myscript"
@ -2343,6 +2363,10 @@ par_sh_parset() {
# env_parset 'myarray[6],myarray[5],myarray[4]' myfun ::: baz bar foo # env_parset 'myarray[6],myarray[5],myarray[4]' myfun ::: baz bar foo
# echo "${myarray[*]}" # echo "${myarray[*]}"
# echo "${myarray[4]} ${myarray[5]} ${myarray[6]}" # echo "${myarray[4]} ${myarray[5]} ${myarray[6]}"
parset a,b,c 'echo {};exit {}' ::: 0 1 1 0
echo Exit value 2 = $?
env_parset a,b,c 'echo {};exit {}' ::: 0 1 1 0
echo Exit value 2 = $?
_EOF _EOF
) )
ssh sh@lo "$myscript" ssh sh@lo "$myscript"
@ -2409,6 +2433,10 @@ par_zsh_parset() {
env_parset 'myarray[6],myarray[5],myarray[4]' myfun ::: baz bar foo env_parset 'myarray[6],myarray[5],myarray[4]' myfun ::: baz bar foo
echo "${myarray[*]}" echo "${myarray[*]}"
echo "${myarray[4]} ${myarray[5]} ${myarray[6]}" echo "${myarray[4]} ${myarray[5]} ${myarray[6]}"
parset a,b,c 'echo {};exit {}' ::: 0 1 1 0
echo Exit value 2 = $?
env_parset a,b,c 'echo {};exit {}' ::: 0 1 1 0
echo Exit value 2 = $?
_EOS`" _EOS`"
_EOF _EOF
) )

View file

@ -5,24 +5,21 @@ unset TIMEOUT
. `which env_parallel.bash` . `which env_parallel.bash`
env_parallel --session env_parallel --session
P_ALL="qnx pidora alpha tru64 hpux-ia64 syllable raspbian solaris openindiana aix hpux debian-ppc suse solaris-x86 mandriva ubuntu scosysv unixware centos miros macosx redhat netbsd openbsd freebsd debian dragonfly vax ultrix minix irix hurd beaglebone cubieboard2"
# P_NOTWORKING="vax alpha openstep"
# P_NOTWORKING_YET="ultrix irix"
#
# P_WORKING="openbsd tru64 debian freebsd redhat netbsd macosx miros centos unixware pidora ubuntu scosysv raspbian solaris-x86 aix mandriva debian-ppc suse solaris hpux openindiana hpux-ia64"
# P_WORKING="openbsd tru64 debian redhat netbsd macosx miros centos unixware pidora scosysv raspbian solaris-x86 aix mandriva debian-ppc suse solaris hpux hurd freebsd ubuntu openindiana"
# P_TEMPORARILY_BROKEN="minix dragonfly hpux-ia64 beaglebone cubieboard2"
P_ALL="alpha tru64 hpux-ia64 syllable pidora raspbian solaris openindiana aix hpux qnx debian-ppc suse solaris-x86 mandriva ubuntu scosysv unixware centos miros macosx redhat netbsd openbsd freebsd debian dragonfly vax ultrix minix irix hurd beaglebone cubieboard2" P="$P_ALL"
P_NOTWORKING="vax alpha openstep"
P_NOTWORKING_YET="ultrix irix"
P_WORKING="openbsd tru64 debian freebsd redhat netbsd macosx miros centos unixware pidora ubuntu scosysv raspbian solaris-x86 aix mandriva debian-ppc suse solaris hpux openindiana hpux-ia64"
P_WORKING="openbsd tru64 debian redhat netbsd macosx miros centos unixware pidora scosysv raspbian solaris-x86 aix mandriva debian-ppc suse solaris hpux hurd freebsd ubuntu openindiana"
P_TEMPORARILY_BROKEN="minix dragonfly hpux-ia64 beaglebone cubieboard2"
P="$P_WORKING"
POLAR=`parallel -k echo {}.polarhome.com ::: $P`
S_POLAR=`parallel -k echo -S 1/{}.polarhome.com ::: $P`
# 2018-04-22 MAXTIME=20 # 2018-04-22 MAXTIME=20
MAXTIME=25 MAXTIME=25
RETRIES=4 RETRIES=4
parallel --retries $RETRIES rsync -a /usr/local/bin/{parallel,env_parallel,env_parallel.*,parcat} ::: redhat.polarhome.com:bin/ parallel --retries $RETRIES rsync -a /usr/local/bin/{parallel,env_parallel,env_parallel.*,parcat} ::: ubuntu.polarhome.com:bin/
doit() { doit() {
# Avoid the stupid /etc/issue.net banner at Polarhome: -oLogLevel=quiet # Avoid the stupid /etc/issue.net banner at Polarhome: -oLogLevel=quiet
@ -30,8 +27,13 @@ doit() {
export PARALLEL_SSH export PARALLEL_SSH
export MAXTIME export MAXTIME
export RETRIES export RETRIES
echo MAXTIME=$MAXTIME RETRIES=$RETRIES echo MAXTIME=$MAXTIME RETRIES=$RETRIES
echo '### Filter out working servers'
POLAR="`bin/parallel -j0 -k --retries $RETRIES --timeout $MAXTIME $PARALLEL_SSH {} echo {} ::: $P`"
S_POLAR=`bin/parallel -j0 -k --retries $RETRIES --timeout $MAXTIME echo -S 1/{} ::: $POLAR`
copy() { copy() {
# scp, but atomic (avoid half files if disconnected) # scp, but atomic (avoid half files if disconnected)
host=$1 host=$1
@ -43,19 +45,24 @@ doit() {
export -f copy export -f copy
par_nonall() { par_nonall() {
parallel -j15 -k --retries $RETRIES --timeout $MAXTIME --delay 0.1 --tag \ parallel -j150 -k --retries $RETRIES --timeout $MAXTIME --delay 0.1 --tag \
--nonall $S_POLAR --argsep ,:- \ --nonall $S_POLAR --argsep ,:- \
'source setupenv >&/dev/null || . `pwd`/setupenv;' "$@" 'source setupenv >&/dev/null || . `pwd`/setupenv;' "$@"
} }
export -f par_nonall export -f par_nonall
echo '### Copy commands to servers' echo '### Copy commands to servers'
parallel -vkj15 --retries $RETRIES --timeout $MAXTIME --delay 0.03 --tag \ parallel -vkj150 --retries $RETRIES --timeout $MAXTIME --delay 0.03 --tag \
copy {2} {1} {1/} \ copy {2} {1} {1/} \
::: bin/{parallel,env_parallel,env_parallel.*,parcat,stdout} \ ::: bin/{parallel,env_parallel,env_parallel.*[^~],parcat,stdout} \
::: $POLAR ::: $POLAR
echo Done copying echo Done copying
echo
echo '### Works on ...'
echo
par_nonall parallel echo Works on {} ::: '`hostname`' 2>&1
# Test empty command # Test empty command
test_empty_cmd() { test_empty_cmd() {
echo '### Test if empty command in process list causes problems' echo '### Test if empty command in process list causes problems'
@ -65,7 +72,9 @@ doit() {
export -f test_empty_cmd export -f test_empty_cmd
PARALLEL='--env test_empty_cmd' par_nonall test_empty_cmd 2>&1 PARALLEL='--env test_empty_cmd' par_nonall test_empty_cmd 2>&1
par_nonall parallel echo Works on {} ::: '`hostname`' 2>&1 echo
echo '### Fails if tmpdir is R/O'
echo
par_nonall "stdout parallel --tmpdir / echo ::: test read-only tmp |" \ par_nonall "stdout parallel --tmpdir / echo ::: test read-only tmp |" \
"perl -pe '\$exit += s:/[a-z0-9_]+.arg:/XXXXXXXX.arg:gi; \$exit += s/[0-9][0-9][0-9][0-9]/0000/gi; END { exit not \$exit }' &&" \ "perl -pe '\$exit += s:/[a-z0-9_]+.arg:/XXXXXXXX.arg:gi; \$exit += s/[0-9][0-9][0-9][0-9]/0000/gi; END { exit not \$exit }' &&" \
"echo OK readonly tmp" 2>&1 "echo OK readonly tmp" 2>&1
@ -96,7 +105,7 @@ doit() {
echo echo
echo '### env_parallel echo :::: <(echo OK)' echo '### env_parallel echo :::: <(echo OK)'
echo '(bash ksh zsh only)' echo '(bash ksh mksh zsh only)'
echo echo
par_nonall 'bin/env_parallel --install && echo install-OK' 2>&1 par_nonall 'bin/env_parallel --install && echo install-OK' 2>&1
par_nonall 'env_parallel echo env_parallel ::: run-OK' 2>&1 par_nonall 'env_parallel echo env_parallel ::: run-OK' 2>&1
@ -106,7 +115,7 @@ doit() {
echo echo
echo '### parset arr seq ::: 2 3 4' echo '### parset arr seq ::: 2 3 4'
echo '(bash ksh zsh only)' echo '(bash ksh mksh zsh only)'
echo echo
par_nonall 'parset arr seq ::: 2 3 4; echo ${arr[*]}' 2>&1 par_nonall 'parset arr seq ::: 2 3 4; echo ${arr[*]}' 2>&1
echo '### env_parset arr seq ::: 2 3 4' echo '### env_parset arr seq ::: 2 3 4'
@ -114,14 +123,14 @@ doit() {
echo echo
echo '### parset var1,var2,var3 seq ::: 2 3 4' echo '### parset var1,var2,var3 seq ::: 2 3 4'
echo '(bash ksh zsh ash dash only)' echo '(bash ksh mksh zsh ash dash only)'
echo echo
par_nonall 'parset var1,var2,var3 seq ::: 2 3 4; echo $var1,$var2,$var3' 2>&1 par_nonall 'parset var1,var2,var3 seq ::: 2 3 4; echo $var1,$var2,$var3' 2>&1
echo '### env_parset var1,var2,var3 seq ::: 2 3 4' echo '### env_parset var1,var2,var3 seq ::: 2 3 4'
par_nonall 'start=2; env_parset var1,var2,var3 seq \$start ::: 2 3 4; echo $var1,$var2,$var3' 2>&1 par_nonall 'start=2; env_parset var1,var2,var3 seq \$start ::: 2 3 4; echo $var1,$var2,$var3' 2>&1
} }
env_parallel -u -Sredhat.polarhome.com doit ::: 1 env_parallel -u -Subuntu.polarhome.com doit ::: 1
# eval 'myfunc() { echo '$(perl -e 'print "x"x20000')'; }' # eval 'myfunc() { echo '$(perl -e 'print "x"x20000')'; }'
# env_parallel myfunc ::: a | wc # OK # env_parallel myfunc ::: a | wc # OK

View file

@ -123,7 +123,7 @@ stdout ssh $SSHLOGIN1 ls 'tmp/parallel.file*' || echo OK
stdout ssh $SSHLOGIN2 ls 'tmp/parallel.file*' || echo OK stdout ssh $SSHLOGIN2 ls 'tmp/parallel.file*' || echo OK
echo 'Input for ssh' echo 'Input for ssh'
cat /tmp/myssh1-run /tmp/myssh2-run | perl -pe 's/(PID.)\d+/${1}00000/g;s/(SEQ[ =]|line)\d/$1X/g;' | cat /tmp/myssh1-run /tmp/myssh2-run | perl -pe 's/(PID.)\d+/${1}00000/g;s/(SEQ[ =]|line)\d/$1X/g;' |
perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-zA-Z0-9/\\+=]{500,}:base64:;' perl -pe 's/\S*parallel-server\S*/one-server/;s:\S[a-zA-Z0-9/\\+=]{500,}\S:base64:;'
rm /tmp/myssh1-run /tmp/myssh2-run rm /tmp/myssh1-run /tmp/myssh2-run
rm -rf /tmp/parallel.file* rm -rf /tmp/parallel.file*

View file

@ -3,7 +3,7 @@
SERVER1=parallel-server1 SERVER1=parallel-server1
SERVER2=parallel-server2 SERVER2=parallel-server2
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1 cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1 | perl -pe 's/(PARALLEL_PID....)\d+/$1XXXXX/g'
echo '### Test --return of weirdly named file' echo '### Test --return of weirdly named file'
stdout parallel --return {} -vv -S parallel\@$SERVER1 echo '>'{} ::: 'aa<${#}" b' | stdout parallel --return {} -vv -S parallel\@$SERVER1 echo '>'{} ::: 'aa<${#}" b' |
perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-z+=/\\0-9]{500,}:base64:i;'; rm 'aa<${#}" b' perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-z+=/\\0-9]{500,}:base64:i;'; rm 'aa<${#}" b'

View file

@ -64,10 +64,9 @@ par_shebang with
par_shebang /usr/bin/perl -w ./shebang-wrap-opt options par_shebang /usr/bin/perl -w ./shebang-wrap-opt options
par_shebang options par_shebang options
par_shellshock_bug par_shellshock_bug 2>&1 par_shellshock_bug par_shellshock_bug 2>&1
par_shellshock_bug bug #43358: shellshock breaks exporting functions using --env _ par_shellshock_bug bug #43358: shellshock breaks exporting functions using --env name
par_shellshock_bug Non-shellshock-hardened to non-shellshock-hardened par_shellshock_bug Non-shellshock-hardened to non-shellshock-hardened
par_shellshock_bug Function non-shellshock-hardened par_shellshock_bug Function non-shellshock-hardened
par_shellshock_bug bug #43358: shellshock breaks exporting functions using --env _ par_shellshock_bug bug #43358: shellshock breaks exporting functions using --env name
par_shellshock_bug Non-shellshock-hardened to shellshock-hardened par_shellshock_bug Non-shellshock-hardened to shellshock-hardened
par_shellshock_bug parallel: Warning: Shell functions may not be supported in /bin/sh.
par_shellshock_bug Function shellshock-hardened par_shellshock_bug Function shellshock-hardened

View file

@ -1,503 +0,0 @@
### Test installation missing pod2*
make[0]: Entering directory '~/privat/parallel'
make dist-gzip am__post_remove_distdir='@:'
make[0]: Entering directory '~/privat/parallel'
if test -d "parallel-00000000"; then find "parallel-00000000" -type d ! -perm -200 -exec chmod u+w {} ';' && rm -rf "parallel-00000000" || { sleep 5 && rm -rf "parallel-00000000"; }; else :; fi
test -d "parallel-00000000" || mkdir "parallel-00000000"
(cd src && make top_distdir=../parallel-00000000 distdir=../parallel-00000000/src \
am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)
make[0]: Entering directory '~/privat/parallel/src'
pod2man --release='00000000' --center='parallel' \
--section=7 ./parallel_design.pod > ./parallel_design.7n \
&& mv ./parallel_design.7n ./parallel_design.7 \
|| echo "Warning: pod2man not found. Using old parallel_design.7"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old parallel_design.7
make[0]: Leaving directory '~/privat/parallel/src'
test -n "" \
|| find "parallel-00000000" -type d ! -perm -755 \
-exec chmod u+rwx,go+rx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
! -type d ! -perm -444 -exec /bin/bash ~/privat/parallel/install-sh -c -m a+r {} {} \; \
|| chmod -R a+r "parallel-00000000"
tardir=parallel-00000000 && ${TAR-tar} chof - "$tardir" | GZIP=--best gzip -c >parallel-00000000.tar.gz
make[0]: Leaving directory '~/privat/parallel'
if test -d "parallel-00000000"; then find "parallel-00000000" -type d ! -perm -200 -exec chmod u+w {} ';' && rm -rf "parallel-00000000" || { sleep 5 && rm -rf "parallel-00000000"; }; else :; fi
make[0]: Leaving directory '~/privat/parallel'
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether ln -s works... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating config.h
Making install in src
make[0]: Entering directory '/tmp/parallel-00000000/src'
pod2man --release='00000000' --center='parallel' \
--section=1 ./parallel.pod > ./parallel.1n \
&& mv ./parallel.1n ./parallel.1 \
|| echo "Warning: pod2man not found. Using old parallel.1"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old parallel.1
pod2man --release='00000000' --center='parallel' \
--section=1 ./env_parallel.pod > ./env_parallel.1n \
&& mv ./env_parallel.1n ./env_parallel.1 \
|| echo "Warning: pod2man not found. Using old env_parallel.1"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old env_parallel.1
pod2man --release='00000000' --center='parallel' \
--section=1 ./sem.pod > ./sem.1n \
&& mv ./sem.1n ./sem.1 \
|| echo "Warning: pod2man not found. Using old sem.1"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old sem.1
pod2man --release='00000000' --center='parallel' \
--section=1 ./sql > ./sql.1n \
&& mv ./sql.1n ./sql.1 \
|| echo "Warning: pod2man not found. Using old sql.1"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old sql.1
pod2man --release='00000000' --center='parallel' \
--section=1 ./niceload.pod > ./niceload.1n \
&& mv ./niceload.1n ./niceload.1 \
|| echo "Warning: pod2man not found. Using old niceload.1"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old niceload.1
pod2man --release='00000000' --center='parallel' \
--section=7 ./parallel_tutorial.pod > ./parallel_tutorial.7n \
&& mv ./parallel_tutorial.7n ./parallel_tutorial.7 \
|| echo "Warning: pod2man not found. Using old parallel_tutorial.7"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old parallel_tutorial.7
pod2man --release='00000000' --center='parallel' \
--section=7 ./parallel_book.pod > ./parallel_book.7n \
&& mv ./parallel_book.7n ./parallel_book.7 \
|| echo "Warning: pod2man not found. Using old parallel_book.7"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old parallel_book.7
pod2man --release='00000000' --center='parallel' \
--section=7 ./parallel_design.pod > ./parallel_design.7n \
&& mv ./parallel_design.7n ./parallel_design.7 \
|| echo "Warning: pod2man not found. Using old parallel_design.7"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old parallel_design.7
pod2man --release='00000000' --center='parallel' \
--section=7 ./parallel_alternatives.pod > ./parallel_alternatives.7n \
&& mv ./parallel_alternatives.7n ./parallel_alternatives.7 \
|| echo "Warning: pod2man not found. Using old parallel_alternatives.7"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old parallel_alternatives.7
pod2man --release='00000000' --center='parallel' \
--section=1 ./parcat.pod > ./parcat.1n \
&& mv ./parcat.1n ./parcat.1 \
|| echo "Warning: pod2man not found. Using old parcat.1"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old parcat.1
pod2man --release='00000000' --center='parallel' \
--section=1 ./parset.pod > ./parset.1n \
&& mv ./parset.1n ./parset.1 \
|| echo "Warning: pod2man not found. Using old parset.1"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old parset.1
pod2html --title "GNU Parallel" ./parallel.pod > ./parallel.htmln \
&& mv ./parallel.htmln ./parallel.html \
|| echo "Warning: pod2html not found. Using old parallel.html"
/bin/bash: pod2html: command not found
Warning: pod2html not found. Using old parallel.html
rm -f ./pod2htm*
pod2html --title "GNU Parallel with environment" ./env_parallel.pod > ./env_parallel.htmln \
&& mv ./env_parallel.htmln ./env_parallel.html \
|| echo "Warning: pod2html not found. Using old env_parallel.html"
/bin/bash: pod2html: command not found
Warning: pod2html not found. Using old env_parallel.html
rm -f ./pod2htm*
pod2html --title "GNU Parallel tutorial" ./parallel_tutorial.pod > ./parallel_tutorial.htmln \
&& mv ./parallel_tutorial.htmln ./parallel_tutorial.html \
|| echo "Warning: pod2html not found. Using old parallel_tutorial.html"
/bin/bash: pod2html: command not found
Warning: pod2html not found. Using old parallel_tutorial.html
rm -f ./pod2htm*
pod2html --title "GNU Parallel book" ./parallel_book.pod > ./parallel_book.htmln \
&& mv ./parallel_book.htmln ./parallel_book.html \
|| echo "Warning: pod2html not found. Using old parallel_book.html"
/bin/bash: pod2html: command not found
Warning: pod2html not found. Using old parallel_book.html
rm -f ./pod2htm*
pod2html --title "GNU Parallel design" ./parallel_design.pod > ./parallel_design.htmln \
&& mv ./parallel_design.htmln ./parallel_design.html \
|| echo "Warning: pod2html not found. Using old parallel_design.html"
/bin/bash: pod2html: command not found
Warning: pod2html not found. Using old parallel_design.html
rm -f ./pod2htm*
pod2html --title "GNU Parallel alternatives" ./parallel_alternatives.pod > ./parallel_alternatives.htmln \
&& mv ./parallel_alternatives.htmln ./parallel_alternatives.html \
|| echo "Warning: pod2html not found. Using old parallel_alternatives.html"
/bin/bash: pod2html: command not found
Warning: pod2html not found. Using old parallel_alternatives.html
rm -f ./pod2htm*
pod2html --title "sem (GNU Parallel)" ./sem.pod > ./sem.htmln \
&& mv ./sem.htmln ./sem.html \
|| echo "Warning: pod2html not found. Using old sem.html"
/bin/bash: pod2html: command not found
Warning: pod2html not found. Using old sem.html
rm -f ./pod2htm*
pod2html --title "GNU SQL" ./sql > ./sql.htmln \
&& mv ./sql.htmln ./sql.html \
|| echo "Warning: pod2html not found. Using old sql.html"
/bin/bash: pod2html: command not found
Warning: pod2html not found. Using old sql.html
rm -f ./pod2htm*
pod2html --title "GNU niceload" ./niceload.pod > ./niceload.htmln \
&& mv ./niceload.htmln ./niceload.html \
|| echo "Warning: pod2html not found. Using old niceload.html"
/bin/bash: pod2html: command not found
Warning: pod2html not found. Using old niceload.html
rm -f ./pod2htm*
pod2html --title "GNU parcat" ./parcat.pod > ./parcat.htmln \
&& mv ./parcat.htmln ./parcat.html \
|| echo "Warning: pod2html not found. Using old parcat.html"
/bin/bash: pod2html: command not found
Warning: pod2html not found. Using old parcat.html
rm -f ./pod2htm*
pod2html --title "GNU parset" ./parset.pod > ./parset.htmln \
&& mv ./parset.htmln ./parset.html \
|| echo "Warning: pod2html not found. Using old parset.html"
/bin/bash: pod2html: command not found
Warning: pod2html not found. Using old parset.html
rm -f ./pod2htm*
pod2texi --output=./parallel.texi ./parallel.pod \
|| echo "Warning: pod2texi not found. Using old parallel.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old parallel.texi
pod2texi --output=./env_parallel.texi ./env_parallel.pod \
|| echo "Warning: pod2texi not found. Using old env_parallel.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old env_parallel.texi
pod2texi --output=./sem.texi ./sem.pod \
|| echo "Warning: pod2texi not found. Using old sem.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old sem.texi
pod2texi --output=./sql.texi ./sql \
|| echo "Warning: pod2texi not found. Using old sql.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old sql.texi
pod2texi --output=./niceload.texi ./niceload.pod \
|| echo "Warning: pod2texi not found. Using old niceload.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old niceload.texi
pod2texi --output=./parallel_tutorial.texi ./parallel_tutorial.pod \
|| echo "Warning: pod2texi not found. Using old parallel_tutorial.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old parallel_tutorial.texi
pod2texi --output=./parallel_book.texi ./parallel_book.pod \
|| echo "Warning: pod2texi not found. Using old parallel_book.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old parallel_book.texi
pod2texi --output=./parallel_design.texi ./parallel_design.pod \
|| echo "Warning: pod2texi not found. Using old parallel_design.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old parallel_design.texi
pod2texi --output=./parallel_alternatives.texi ./parallel_alternatives.pod \
|| echo "Warning: pod2texi not found. Using old parallel_alternatives.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old parallel_alternatives.texi
pod2texi --output=./parcat.texi ./parcat.pod \
|| echo "Warning: pod2texi not found. Using old parcat.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old parcat.texi
pod2texi --output=./parset.texi ./parset.pod \
|| echo "Warning: pod2texi not found. Using old parset.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old parset.texi
pod2pdf --output-file ./parallel.pdf ./parallel.pod --title "GNU Parallel" \
|| echo "Warning: pod2pdf not found. Using old parallel.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old parallel.pdf
pod2pdf --output-file ./env_parallel.pdf ./env_parallel.pod --title "GNU Parallel with environment" \
|| echo "Warning: pod2pdf not found. Using old env_parallel.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old env_parallel.pdf
pod2pdf --output-file ./sem.pdf ./sem.pod --title "GNU sem" \
|| echo "Warning: pod2pdf not found. Using old sem.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old sem.pdf
pod2pdf --output-file ./sql.pdf ./sql --title "GNU SQL" \
|| echo "Warning: pod2pdf not found. Using old sql.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old sql.pdf
pod2pdf --output-file ./niceload.pdf ./niceload.pod --title "GNU niceload" \
|| echo "Warning: pod2pdf not found. Using old niceload.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old niceload.pdf
pod2pdf --output-file ./parallel_tutorial.pdf ./parallel_tutorial.pod --title "GNU Parallel Tutorial" \
|| echo "Warning: pod2pdf not found. Using old parallel_tutorial.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old parallel_tutorial.pdf
pod2pdf --output-file ./parallel_book.pdf ./parallel_book.pod --title "GNU Parallel Book" \
|| echo "Warning: pod2pdf not found. Using old parallel_book.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old parallel_book.pdf
pod2pdf --output-file ./parallel_design.pdf ./parallel_design.pod --title "GNU Parallel Design" \
|| echo "Warning: pod2pdf not found. Using old parallel_design.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old parallel_design.pdf
pod2pdf --output-file ./parallel_alternatives.pdf ./parallel_alternatives.pod --title "GNU Parallel alternatives" \
|| echo "Warning: pod2pdf not found. Using old parallel_alternatives.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old parallel_alternatives.pdf
pod2pdf --output-file ./parcat.pdf ./parcat.pod --title "GNU parcat" \
|| echo "Warning: pod2pdf not found. Using old parcat.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old parcat.pdf
pod2pdf --output-file ./parset.pdf ./parset.pod --title "GNU parset" \
|| echo "Warning: pod2pdf not found. Using old parset.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old parset.pdf
make[0]: Entering directory '/tmp/parallel-00000000/src'
/bin/mkdir -p '/usr/local/bin'
/usr/bin/install -c parallel sql niceload parcat parset env_parallel env_parallel.ash env_parallel.bash env_parallel.csh env_parallel.dash env_parallel.fish env_parallel.ksh env_parallel.pdksh env_parallel.sh env_parallel.tcsh env_parallel.zsh '/usr/local/bin'
make install-exec-hook
make[0]: Entering directory '/tmp/parallel-00000000/src'
rm /usr/local/bin/sem || true
ln -s parallel /usr/local/bin/sem
make[0]: Leaving directory '/tmp/parallel-00000000/src'
pod2html --title "GNU Parallel" ./parallel.pod > ./parallel.htmln \
&& mv ./parallel.htmln ./parallel.html \
|| echo "Warning: pod2html not found. Using old parallel.html"
/bin/bash: pod2html: command not found
Warning: pod2html not found. Using old parallel.html
rm -f ./pod2htm*
pod2html --title "GNU Parallel with environment" ./env_parallel.pod > ./env_parallel.htmln \
&& mv ./env_parallel.htmln ./env_parallel.html \
|| echo "Warning: pod2html not found. Using old env_parallel.html"
/bin/bash: pod2html: command not found
Warning: pod2html not found. Using old env_parallel.html
rm -f ./pod2htm*
pod2html --title "GNU Parallel tutorial" ./parallel_tutorial.pod > ./parallel_tutorial.htmln \
&& mv ./parallel_tutorial.htmln ./parallel_tutorial.html \
|| echo "Warning: pod2html not found. Using old parallel_tutorial.html"
/bin/bash: pod2html: command not found
Warning: pod2html not found. Using old parallel_tutorial.html
rm -f ./pod2htm*
pod2html --title "GNU Parallel book" ./parallel_book.pod > ./parallel_book.htmln \
&& mv ./parallel_book.htmln ./parallel_book.html \
|| echo "Warning: pod2html not found. Using old parallel_book.html"
/bin/bash: pod2html: command not found
Warning: pod2html not found. Using old parallel_book.html
rm -f ./pod2htm*
pod2html --title "GNU Parallel design" ./parallel_design.pod > ./parallel_design.htmln \
&& mv ./parallel_design.htmln ./parallel_design.html \
|| echo "Warning: pod2html not found. Using old parallel_design.html"
/bin/bash: pod2html: command not found
Warning: pod2html not found. Using old parallel_design.html
rm -f ./pod2htm*
pod2html --title "GNU Parallel alternatives" ./parallel_alternatives.pod > ./parallel_alternatives.htmln \
&& mv ./parallel_alternatives.htmln ./parallel_alternatives.html \
|| echo "Warning: pod2html not found. Using old parallel_alternatives.html"
/bin/bash: pod2html: command not found
Warning: pod2html not found. Using old parallel_alternatives.html
rm -f ./pod2htm*
pod2html --title "sem (GNU Parallel)" ./sem.pod > ./sem.htmln \
&& mv ./sem.htmln ./sem.html \
|| echo "Warning: pod2html not found. Using old sem.html"
/bin/bash: pod2html: command not found
Warning: pod2html not found. Using old sem.html
rm -f ./pod2htm*
pod2html --title "GNU SQL" ./sql > ./sql.htmln \
&& mv ./sql.htmln ./sql.html \
|| echo "Warning: pod2html not found. Using old sql.html"
/bin/bash: pod2html: command not found
Warning: pod2html not found. Using old sql.html
rm -f ./pod2htm*
pod2html --title "GNU niceload" ./niceload.pod > ./niceload.htmln \
&& mv ./niceload.htmln ./niceload.html \
|| echo "Warning: pod2html not found. Using old niceload.html"
/bin/bash: pod2html: command not found
Warning: pod2html not found. Using old niceload.html
rm -f ./pod2htm*
pod2html --title "GNU parcat" ./parcat.pod > ./parcat.htmln \
&& mv ./parcat.htmln ./parcat.html \
|| echo "Warning: pod2html not found. Using old parcat.html"
/bin/bash: pod2html: command not found
Warning: pod2html not found. Using old parcat.html
rm -f ./pod2htm*
pod2html --title "GNU parset" ./parset.pod > ./parset.htmln \
&& mv ./parset.htmln ./parset.html \
|| echo "Warning: pod2html not found. Using old parset.html"
/bin/bash: pod2html: command not found
Warning: pod2html not found. Using old parset.html
rm -f ./pod2htm*
pod2texi --output=./parallel.texi ./parallel.pod \
|| echo "Warning: pod2texi not found. Using old parallel.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old parallel.texi
pod2texi --output=./env_parallel.texi ./env_parallel.pod \
|| echo "Warning: pod2texi not found. Using old env_parallel.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old env_parallel.texi
pod2texi --output=./sem.texi ./sem.pod \
|| echo "Warning: pod2texi not found. Using old sem.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old sem.texi
pod2texi --output=./sql.texi ./sql \
|| echo "Warning: pod2texi not found. Using old sql.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old sql.texi
pod2texi --output=./niceload.texi ./niceload.pod \
|| echo "Warning: pod2texi not found. Using old niceload.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old niceload.texi
pod2texi --output=./parallel_tutorial.texi ./parallel_tutorial.pod \
|| echo "Warning: pod2texi not found. Using old parallel_tutorial.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old parallel_tutorial.texi
pod2texi --output=./parallel_book.texi ./parallel_book.pod \
|| echo "Warning: pod2texi not found. Using old parallel_book.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old parallel_book.texi
pod2texi --output=./parallel_design.texi ./parallel_design.pod \
|| echo "Warning: pod2texi not found. Using old parallel_design.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old parallel_design.texi
pod2texi --output=./parallel_alternatives.texi ./parallel_alternatives.pod \
|| echo "Warning: pod2texi not found. Using old parallel_alternatives.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old parallel_alternatives.texi
pod2texi --output=./parcat.texi ./parcat.pod \
|| echo "Warning: pod2texi not found. Using old parcat.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old parcat.texi
pod2texi --output=./parset.texi ./parset.pod \
|| echo "Warning: pod2texi not found. Using old parset.texi"
/bin/bash: pod2texi: command not found
Warning: pod2texi not found. Using old parset.texi
pod2pdf --output-file ./parallel.pdf ./parallel.pod --title "GNU Parallel" \
|| echo "Warning: pod2pdf not found. Using old parallel.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old parallel.pdf
pod2pdf --output-file ./env_parallel.pdf ./env_parallel.pod --title "GNU Parallel with environment" \
|| echo "Warning: pod2pdf not found. Using old env_parallel.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old env_parallel.pdf
pod2pdf --output-file ./sem.pdf ./sem.pod --title "GNU sem" \
|| echo "Warning: pod2pdf not found. Using old sem.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old sem.pdf
pod2pdf --output-file ./sql.pdf ./sql --title "GNU SQL" \
|| echo "Warning: pod2pdf not found. Using old sql.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old sql.pdf
pod2pdf --output-file ./niceload.pdf ./niceload.pod --title "GNU niceload" \
|| echo "Warning: pod2pdf not found. Using old niceload.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old niceload.pdf
pod2pdf --output-file ./parallel_tutorial.pdf ./parallel_tutorial.pod --title "GNU Parallel Tutorial" \
|| echo "Warning: pod2pdf not found. Using old parallel_tutorial.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old parallel_tutorial.pdf
pod2pdf --output-file ./parallel_book.pdf ./parallel_book.pod --title "GNU Parallel Book" \
|| echo "Warning: pod2pdf not found. Using old parallel_book.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old parallel_book.pdf
pod2pdf --output-file ./parallel_design.pdf ./parallel_design.pod --title "GNU Parallel Design" \
|| echo "Warning: pod2pdf not found. Using old parallel_design.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old parallel_design.pdf
pod2pdf --output-file ./parallel_alternatives.pdf ./parallel_alternatives.pod --title "GNU Parallel alternatives" \
|| echo "Warning: pod2pdf not found. Using old parallel_alternatives.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old parallel_alternatives.pdf
pod2pdf --output-file ./parcat.pdf ./parcat.pod --title "GNU parcat" \
|| echo "Warning: pod2pdf not found. Using old parcat.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old parcat.pdf
pod2pdf --output-file ./parset.pdf ./parset.pod --title "GNU parset" \
|| echo "Warning: pod2pdf not found. Using old parset.pdf"
/bin/bash: pod2pdf: command not found
Warning: pod2pdf not found. Using old parset.pdf
/bin/mkdir -p '/usr/local/share/doc/parallel'
/usr/bin/install -c -m 644 parallel.html env_parallel.html sem.html sql.html niceload.html parallel_tutorial.html parallel_book.html parallel_design.html parallel_alternatives.html parcat.html parset.html parallel.texi env_parallel.texi sem.texi sql.texi niceload.texi parallel_tutorial.texi parallel_book.texi parallel_design.texi parallel_alternatives.texi parcat.texi parset.texi parallel.pdf env_parallel.pdf sem.pdf sql.pdf niceload.pdf parallel_tutorial.pdf parallel_book.pdf parallel_design.pdf parallel_alternatives.pdf parcat.pdf parset.pdf '/usr/local/share/doc/parallel'
pod2man --release='00000000' --center='parallel' \
--section=1 ./parallel.pod > ./parallel.1n \
&& mv ./parallel.1n ./parallel.1 \
|| echo "Warning: pod2man not found. Using old parallel.1"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old parallel.1
pod2man --release='00000000' --center='parallel' \
--section=1 ./env_parallel.pod > ./env_parallel.1n \
&& mv ./env_parallel.1n ./env_parallel.1 \
|| echo "Warning: pod2man not found. Using old env_parallel.1"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old env_parallel.1
pod2man --release='00000000' --center='parallel' \
--section=1 ./sem.pod > ./sem.1n \
&& mv ./sem.1n ./sem.1 \
|| echo "Warning: pod2man not found. Using old sem.1"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old sem.1
pod2man --release='00000000' --center='parallel' \
--section=1 ./sql > ./sql.1n \
&& mv ./sql.1n ./sql.1 \
|| echo "Warning: pod2man not found. Using old sql.1"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old sql.1
pod2man --release='00000000' --center='parallel' \
--section=1 ./niceload.pod > ./niceload.1n \
&& mv ./niceload.1n ./niceload.1 \
|| echo "Warning: pod2man not found. Using old niceload.1"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old niceload.1
pod2man --release='00000000' --center='parallel' \
--section=7 ./parallel_tutorial.pod > ./parallel_tutorial.7n \
&& mv ./parallel_tutorial.7n ./parallel_tutorial.7 \
|| echo "Warning: pod2man not found. Using old parallel_tutorial.7"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old parallel_tutorial.7
pod2man --release='00000000' --center='parallel' \
--section=7 ./parallel_book.pod > ./parallel_book.7n \
&& mv ./parallel_book.7n ./parallel_book.7 \
|| echo "Warning: pod2man not found. Using old parallel_book.7"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old parallel_book.7
pod2man --release='00000000' --center='parallel' \
--section=7 ./parallel_design.pod > ./parallel_design.7n \
&& mv ./parallel_design.7n ./parallel_design.7 \
|| echo "Warning: pod2man not found. Using old parallel_design.7"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old parallel_design.7
pod2man --release='00000000' --center='parallel' \
--section=7 ./parallel_alternatives.pod > ./parallel_alternatives.7n \
&& mv ./parallel_alternatives.7n ./parallel_alternatives.7 \
|| echo "Warning: pod2man not found. Using old parallel_alternatives.7"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old parallel_alternatives.7
pod2man --release='00000000' --center='parallel' \
--section=1 ./parcat.pod > ./parcat.1n \
&& mv ./parcat.1n ./parcat.1 \
|| echo "Warning: pod2man not found. Using old parcat.1"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old parcat.1
pod2man --release='00000000' --center='parallel' \
--section=1 ./parset.pod > ./parset.1n \
&& mv ./parset.1n ./parset.1 \
|| echo "Warning: pod2man not found. Using old parset.1"
/bin/bash: pod2man: command not found
Warning: pod2man not found. Using old parset.1
/bin/mkdir -p '/usr/local/share/man/man1'
/usr/bin/install -c -m 644 parallel.1 env_parallel.1 sem.1 sql.1 niceload.1 parcat.1 parset.1 '/usr/local/share/man/man1'
/bin/mkdir -p '/usr/local/share/man/man7'
/usr/bin/install -c -m 644 parallel_tutorial.7 parallel_book.7 parallel_design.7 parallel_alternatives.7 '/usr/local/share/man/man7'
make[0]: Leaving directory '/tmp/parallel-00000000/src'
make[0]: Leaving directory '/tmp/parallel-00000000/src'
make[0]: Entering directory '/tmp/parallel-00000000'
make[0]: Entering directory '/tmp/parallel-00000000'
make[0]: Nothing to be done for 'install-exec-am'.
make[0]: Nothing to be done for 'install-data-am'.
make[0]: Leaving directory '/tmp/parallel-00000000'
make[0]: Leaving directory '/tmp/parallel-00000000'

View file

@ -46,12 +46,12 @@ par_exit_code dash parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
par_exit_code fish /tmp/mysleep 100 137 par_exit_code fish /tmp/mysleep 100 137
par_exit_code fish parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137 par_exit_code fish parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
par_exit_code fish parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137 par_exit_code fish parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
par_exit_code fish parallel --halt-on-error now,done=1 true ::: 100 1 par_exit_code fish parallel --halt-on-error now,done=1 true ::: 100 0
par_exit_code fish parallel --halt-on-error now,done=1 exit ::: 100 100 par_exit_code fish parallel --halt-on-error now,done=1 exit ::: 100 100
par_exit_code fish true;/tmp/mysleep 100 137 par_exit_code fish true;/tmp/mysleep 100 137
par_exit_code fish parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137 par_exit_code fish parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
par_exit_code fish parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137 par_exit_code fish parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
par_exit_code fish parallel --halt-on-error now,done=1 "true;true" ::: 100 1 par_exit_code fish parallel --halt-on-error now,done=1 "true;true" ::: 100 0
par_exit_code fish parallel --halt-on-error now,done=1 "true;exit" ::: 100 100 par_exit_code fish parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
par_exit_code mksh /tmp/mysleep 100 0 par_exit_code mksh /tmp/mysleep 100 0
par_exit_code mksh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137 par_exit_code mksh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137

View file

@ -338,10 +338,10 @@ par_results_compress 0
par_results_compress 1 par_results_compress 1
par_results_csv bug #: --results csv par_results_csv bug #: --results csv
par_results_csv --header : --tag --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr par_results_csv --header : --tag --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr
par_results_csv --header : --tag --files --compress 1,:,999.999,999.999,0,31,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --header : --tag --files --compress 1,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile",
par_results_csv --header : --tag --files --compress 2,:,999.999,999.999,0,31,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --header : --tag --files --compress 2,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile",
par_results_csv --header : --tag --files --compress 3,:,999.999,999.999,0,31,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --header : --tag --files --compress 3,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmpdir/tmpfile",
par_results_csv --header : --tag --files --compress 4,:,999.999,999.999,0,31,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --header : --tag --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmpdir/tmpfile",
par_results_csv --header : --tag --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr par_results_csv --header : --tag --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr
par_results_csv --header : --tag --files 1,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --header : --tag --files 1,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile",
par_results_csv --header : --tag --files 2,:,999.999,999.999,0,6,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --header : --tag --files 2,:,999.999,999.999,0,6,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile",
@ -366,10 +366,10 @@ par_results_csv --header : --tag ",
par_results_csv --header : --tag 4,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 23 12 par_results_csv --header : --tag 4,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 23 12
par_results_csv --header : --tag ", par_results_csv --header : --tag ",
par_results_csv --header : --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr par_results_csv --header : --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr
par_results_csv --header : --files --compress 1,:,999.999,999.999,0,31,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --header : --files --compress 1,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile,
par_results_csv --header : --files --compress 2,:,999.999,999.999,0,31,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --header : --files --compress 2,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile,
par_results_csv --header : --files --compress 3,:,999.999,999.999,0,31,0,0,"echo 23 11",23,11,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --header : --files --compress 3,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,/tmp/parallel-local-10s-tmpdir/tmpfile,
par_results_csv --header : --files --compress 4,:,999.999,999.999,0,31,0,0,"echo 23 12",23,12,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --header : --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,/tmp/parallel-local-10s-tmpdir/tmpfile,
par_results_csv --header : --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr par_results_csv --header : --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr
par_results_csv --header : --files 1,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --header : --files 1,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile,
par_results_csv --header : --files 2,:,999.999,999.999,0,6,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --header : --files 2,:,999.999,999.999,0,6,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile,
@ -394,15 +394,15 @@ par_results_csv --header : ",
par_results_csv --header : 4,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 par_results_csv --header : 4,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12
par_results_csv --header : ", par_results_csv --header : ",
par_results_csv --tag --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr par_results_csv --tag --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr
par_results_csv --tag --files --compress 1,:,999.999,999.999,0,31,0,0,"echo H2 H1",H2,H1,"H2 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --tag --files --compress 1,:,999.999,999.999,0,15,0,0,"echo H2 H1",H2,H1,"H2 H1 /tmp/parallel-local-10s-tmpdir/tmpfile",
par_results_csv --tag --files --compress 2,:,999.999,999.999,0,31,0,0,"echo H2 11",H2,11,"H2 11 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --tag --files --compress 2,:,999.999,999.999,0,15,0,0,"echo H2 11",H2,11,"H2 11 /tmp/parallel-local-10s-tmpdir/tmpfile",
par_results_csv --tag --files --compress 3,:,999.999,999.999,0,31,0,0,"echo H2 12",H2,12,"H2 12 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --tag --files --compress 3,:,999.999,999.999,0,15,0,0,"echo H2 12",H2,12,"H2 12 /tmp/parallel-local-10s-tmpdir/tmpfile",
par_results_csv --tag --files --compress 4,:,999.999,999.999,0,31,0,0,"echo 22 H1",22,H1,"22 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --tag --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 22 H1",22,H1,"22 H1 /tmp/parallel-local-10s-tmpdir/tmpfile",
par_results_csv --tag --files --compress 5,:,999.999,999.999,0,31,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --tag --files --compress 5,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile",
par_results_csv --tag --files --compress 6,:,999.999,999.999,0,31,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --tag --files --compress 6,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile",
par_results_csv --tag --files --compress 7,:,999.999,999.999,0,31,0,0,"echo 23 H1",23,H1,"23 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --tag --files --compress 7,:,999.999,999.999,0,15,0,0,"echo 23 H1",23,H1,"23 H1 /tmp/parallel-local-10s-tmpdir/tmpfile",
par_results_csv --tag --files --compress 8,:,999.999,999.999,0,31,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --tag --files --compress 8,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmpdir/tmpfile",
par_results_csv --tag --files --compress 9,:,999.999,999.999,0,31,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --tag --files --compress 9,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmpdir/tmpfile",
par_results_csv --tag --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr par_results_csv --tag --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr
par_results_csv --tag --files 1,:,999.999,999.999,0,6,0,0,"echo H2 H1",H2,H1,"H2 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --tag --files 1,:,999.999,999.999,0,6,0,0,"echo H2 H1",H2,H1,"H2 H1 /tmp/parallel-local-10s-tmpdir/tmpfile",
par_results_csv --tag --files 2,:,999.999,999.999,0,6,0,0,"echo H2 11",H2,11,"H2 11 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --tag --files 2,:,999.999,999.999,0,6,0,0,"echo H2 11",H2,11,"H2 11 /tmp/parallel-local-10s-tmpdir/tmpfile",
@ -452,15 +452,15 @@ par_results_csv --tag ",
par_results_csv --tag 9,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 23 12 par_results_csv --tag 9,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 23 12
par_results_csv --tag ", par_results_csv --tag ",
par_results_csv --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr par_results_csv --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr
par_results_csv --files --compress 1,:,999.999,999.999,0,31,0,0,"echo H2 H1",H2,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --files --compress 1,:,999.999,999.999,0,15,0,0,"echo H2 H1",H2,H1,/tmp/parallel-local-10s-tmpdir/tmpfile,
par_results_csv --files --compress 2,:,999.999,999.999,0,31,0,0,"echo H2 11",H2,11,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --files --compress 2,:,999.999,999.999,0,15,0,0,"echo H2 11",H2,11,/tmp/parallel-local-10s-tmpdir/tmpfile,
par_results_csv --files --compress 3,:,999.999,999.999,0,31,0,0,"echo H2 12",H2,12,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --files --compress 3,:,999.999,999.999,0,15,0,0,"echo H2 12",H2,12,/tmp/parallel-local-10s-tmpdir/tmpfile,
par_results_csv --files --compress 4,:,999.999,999.999,0,31,0,0,"echo 22 H1",22,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 22 H1",22,H1,/tmp/parallel-local-10s-tmpdir/tmpfile,
par_results_csv --files --compress 5,:,999.999,999.999,0,31,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --files --compress 5,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile,
par_results_csv --files --compress 6,:,999.999,999.999,0,31,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --files --compress 6,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile,
par_results_csv --files --compress 7,:,999.999,999.999,0,31,0,0,"echo 23 H1",23,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --files --compress 7,:,999.999,999.999,0,15,0,0,"echo 23 H1",23,H1,/tmp/parallel-local-10s-tmpdir/tmpfile,
par_results_csv --files --compress 8,:,999.999,999.999,0,31,0,0,"echo 23 11",23,11,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --files --compress 8,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,/tmp/parallel-local-10s-tmpdir/tmpfile,
par_results_csv --files --compress 9,:,999.999,999.999,0,31,0,0,"echo 23 12",23,12,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --files --compress 9,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,/tmp/parallel-local-10s-tmpdir/tmpfile,
par_results_csv --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr par_results_csv --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr
par_results_csv --files 1,:,999.999,999.999,0,6,0,0,"echo H2 H1",H2,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --files 1,:,999.999,999.999,0,6,0,0,"echo H2 H1",H2,H1,/tmp/parallel-local-10s-tmpdir/tmpfile,
par_results_csv --files 2,:,999.999,999.999,0,6,0,0,"echo H2 11",H2,11,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --files 2,:,999.999,999.999,0,6,0,0,"echo H2 11",H2,11,/tmp/parallel-local-10s-tmpdir/tmpfile,
@ -528,9 +528,9 @@ par_slow_total_jobs 2
par_slow_total_jobs parallel: Warning: Reading X arguments took longer than XX seconds. par_slow_total_jobs parallel: Warning: Reading X arguments took longer than XX seconds.
par_sockets_cores_threads ### Test --number-of-sockets/cores/threads par_sockets_cores_threads ### Test --number-of-sockets/cores/threads
par_sockets_cores_threads 1 par_sockets_cores_threads 1
par_sockets_cores_threads 2 par_sockets_cores_threads 4
par_sockets_cores_threads 2 par_sockets_cores_threads 8
par_sockets_cores_threads 2 par_sockets_cores_threads 4
par_sockets_cores_threads ### Test --use-sockets-instead-of-threads par_sockets_cores_threads ### Test --use-sockets-instead-of-threads
par_sockets_cores_threads threads done par_sockets_cores_threads threads done
par_sockets_cores_threads sockets done par_sockets_cores_threads sockets done

File diff suppressed because it is too large Load diff

View file

@ -90,14 +90,14 @@ par_tee_ssh 2
par_tee_ssh 3 par_tee_ssh 3
par_tee_ssh 3 par_tee_ssh 3
par_wd_no_such_dir ### --wd no-such-dir - csh par_wd_no_such_dir ### --wd no-such-dir - csh
par_wd_no_such_dir mkdir: cannot create directory /no-such-dir: Permission denied par_wd_no_such_dir mkdir: cannot create directory '/no-such-dir': Permission denied
par_wd_no_such_dir parallel: Cannot chdir to /no-such-dir par_wd_no_such_dir parallel: Cannot chdir to /no-such-dir
par_wd_no_such_dir Exit code 1 par_wd_no_such_dir Exit code 1
par_wd_no_such_dir ### --wd no-such-dir - tcsh par_wd_no_such_dir ### --wd no-such-dir - tcsh
par_wd_no_such_dir mkdir: cannot create directory /no-such-dir: Permission denied par_wd_no_such_dir mkdir: cannot create directory '/no-such-dir': Permission denied
par_wd_no_such_dir parallel: Cannot chdir to /no-such-dir par_wd_no_such_dir parallel: Cannot chdir to /no-such-dir
par_wd_no_such_dir Exit code 1 par_wd_no_such_dir Exit code 1
par_wd_no_such_dir ### --wd no-such-dir - bash par_wd_no_such_dir ### --wd no-such-dir - bash
par_wd_no_such_dir mkdir: cannot create directory /no-such-dir: Permission denied par_wd_no_such_dir mkdir: cannot create directory '/no-such-dir': Permission denied
par_wd_no_such_dir parallel: Cannot chdir to /no-such-dir par_wd_no_such_dir parallel: Cannot chdir to /no-such-dir
par_wd_no_such_dir Exit code 1 par_wd_no_such_dir Exit code 1

View file

@ -54,7 +54,7 @@ par_autossh AUTOSSH_DEBUG - turn logging to maximum verbosity and log
par_autossh stderr par_autossh stderr
par_autossh par_autossh
par_autossh rsync: connection unexpectedly closed (0 bytes received so far) [sender] par_autossh rsync: connection unexpectedly closed (0 bytes received so far) [sender]
par_autossh rsync error: error in rsync protocol data stream (code 12) at io.c(235) [sender=3.1.2] par_autossh rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]
par_autossh /usr/lib/autossh/autossh: invalid option -- '-' par_autossh /usr/lib/autossh/autossh: invalid option -- '-'
par_autossh usage: autossh [-V] [-M monitor_port[:echo_port]] [-f] [SSH_OPTIONS] par_autossh usage: autossh [-V] [-M monitor_port[:echo_port]] [-f] [SSH_OPTIONS]
par_autossh par_autossh
@ -86,4 +86,4 @@ par_autossh AUTOSSH_DEBUG - turn logging to maximum verbosity and log
par_autossh stderr par_autossh stderr
par_autossh par_autossh
par_autossh rsync: connection unexpectedly closed (0 bytes received so far) [Receiver] par_autossh rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
par_autossh rsync error: error in rsync protocol data stream (code 12) at io.c(235) [Receiver=3.1.2] par_autossh rsync error: error in rsync protocol data stream (code 12) at io.c(226) [Receiver=3.1.1]

View file

@ -66,6 +66,8 @@ par_zsh_parset 2
par_zsh_parset 3 par_zsh_parset 3
par_zsh_parset myecho myvar myarr 0 myfun foo myecho myvar myarr 0 myfun bar myecho myvar myarr 0 myfun baz par_zsh_parset myecho myvar myarr 0 myfun foo myecho myvar myarr 0 myfun bar myecho myvar myarr 0 myfun baz
par_zsh_parset myecho myvar myarr 0 myfun foo myecho myvar myarr 0 myfun bar myecho myvar myarr 0 myfun baz par_zsh_parset myecho myvar myarr 0 myfun foo myecho myvar myarr 0 myfun bar myecho myvar myarr 0 myfun baz
par_zsh_parset Exit value 2 = 2
par_zsh_parset Exit value 2 = 2
par_zsh_man ### zsh par_zsh_man ### zsh
par_zsh_man ### From man env_parallel par_zsh_man ### From man env_parallel
par_zsh_man aliases with = & " ! ' work par_zsh_man aliases with = & " ! ' work
@ -368,7 +370,7 @@ par_tcsh_funky
par_tcsh_funky 3 arg alias_works par_tcsh_funky 3 arg alias_works
par_tcsh_funky 3 arg alias_works_over_ssh par_tcsh_funky 3 arg alias_works_over_ssh
par_tcsh_funky Funky-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7F>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ-funky alias_var_works par_tcsh_funky Funky-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7F>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ-funky alias_var_works
par_tcsh_funky Funky-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ-funky alias_var_works_over_ssh par_tcsh_funky Funky-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<EFBFBD>ƒ„…†‡ˆ‰ŠŒ<EFBFBD>Ž<EFBFBD><EFBFBD>“”•˜™šœ<EFBFBD>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ-funky alias_var_works_over_ssh
par_tcsh_funky \\\\\\\\ \ \ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ par_tcsh_funky \\\\\\\\ \ \ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ
par_tcsh_funky func_echo: Command not found. par_tcsh_funky func_echo: Command not found.
par_tcsh_funky func_echo: Command not found. par_tcsh_funky func_echo: Command not found.
@ -438,6 +440,8 @@ par_sh_parset newline2
par_sh_parset 1 par_sh_parset 1
par_sh_parset 2 par_sh_parset 2
par_sh_parset 3 par_sh_parset 3
par_sh_parset Exit value 2 = 2
par_sh_parset Exit value 2 = 2
par_sh_man ### sh par_sh_man ### sh
par_sh_man ### From man env_parallel par_sh_man ### From man env_parallel
par_sh_man aliases with = & " ! ' work par_sh_man aliases with = & " ! ' work
@ -608,6 +612,8 @@ par_mksh_parset 2
par_mksh_parset 3 par_mksh_parset 3
par_mksh_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar myecho myvar myarr 1 myfun baz par_mksh_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar myecho myvar myarr 1 myfun baz
par_mksh_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar myecho myvar myarr 1 myfun baz par_mksh_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar myecho myvar myarr 1 myfun baz
par_mksh_parset Exit value 2 = 2
par_mksh_parset Exit value 2 = 2
par_mksh_man ### mksh par_mksh_man ### mksh
par_mksh_man ### From man env_parallel par_mksh_man ### From man env_parallel
par_mksh_man aliases with = & " ! ' work par_mksh_man aliases with = & " ! ' work
@ -889,6 +895,8 @@ par_ksh_parset 2
par_ksh_parset 3 par_ksh_parset 3
par_ksh_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar myecho myvar myarr 1 myfun baz par_ksh_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar myecho myvar myarr 1 myfun baz
par_ksh_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar myecho myvar myarr 1 myfun baz par_ksh_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar myecho myvar myarr 1 myfun baz
par_ksh_parset Exit value 2 = 2
par_ksh_parset Exit value 2 = 2
par_ksh_man ### ksh par_ksh_man ### ksh
par_ksh_man ### From man env_parallel par_ksh_man ### From man env_parallel
par_ksh_man aliases with = & " ! ' work par_ksh_man aliases with = & " ! ' work
@ -957,9 +965,9 @@ par_ksh_man work,
par_ksh_man too par_ksh_man too
par_ksh_man This may never work par_ksh_man This may never work
par_ksh_man https://unix.stackexchange.com/questions/457031/extract-full-function-definitions par_ksh_man https://unix.stackexchange.com/questions/457031/extract-full-function-definitions
par_ksh_man /usr/bin/ksh: line 21: syntax error at line XXX: `{' unmatched par_ksh_man /usr/bin/ksh: line 21: syntax error at line XXX: `(' unexpected
par_ksh_man /usr/bin/ksh: line 21: syntax error at line XXX: `{' unmatched par_ksh_man /usr/bin/ksh: line 21: syntax error at line XXX: `(' unexpected
par_ksh_man /usr/bin/ksh: line 21: syntax error at line XXX: `{' unmatched par_ksh_man /usr/bin/ksh: line 21: syntax error at line XXX: `(' unexpected
par_ksh_man exit value 2 should be 2 par_ksh_man exit value 2 should be 2
par_ksh_man Unknown option: no-such-option par_ksh_man Unknown option: no-such-option
par_ksh_man exit value 255 should be 255 par_ksh_man exit value 255 should be 255
@ -1130,15 +1138,15 @@ par_fish_underscore aliases and arrays in functions work
par_fish_underscore aliases functions work par_fish_underscore aliases functions work
par_fish_underscore aliases functions work par_fish_underscore aliases functions work
par_fish_underscore ^ par_fish_underscore ^
par_fish_underscore in function “myfunc” par_fish_underscore in function 'myfunc'
par_fish_underscore called on standard input par_fish_underscore called on standard input
par_fish_underscore with parameter list “work” par_fish_underscore with parameter list 'work'
par_fish_underscore par_fish_underscore
par_fish_underscore OK if ^^^^^^^^^^^^^^^^^ no myecho par_fish_underscore OK if ^^^^^^^^^^^^^^^^^ no myecho
par_fish_underscore ^ par_fish_underscore ^
par_fish_underscore in function “myfunc” par_fish_underscore in function 'myfunc'
par_fish_underscore called on standard input par_fish_underscore called on standard input
par_fish_underscore with parameter list “work” par_fish_underscore with parameter list 'work'
par_fish_underscore par_fish_underscore
par_fish_underscore OK if ^^^^^^^^^^^^^^^^^ no myecho par_fish_underscore OK if ^^^^^^^^^^^^^^^^^ no myecho
par_fish_underscore ^ par_fish_underscore ^
@ -1277,6 +1285,8 @@ par_dash_parset newline2
par_dash_parset 1 par_dash_parset 1
par_dash_parset 2 par_dash_parset 2
par_dash_parset 3 par_dash_parset 3
par_dash_parset Exit value 2 = 2
par_dash_parset Exit value 2 = 2
par_dash_man ### dash par_dash_man ### dash
par_dash_man ### From man env_parallel par_dash_man ### From man env_parallel
par_dash_man aliases with = & " ! ' work par_dash_man aliases with = & " ! ' work
@ -1553,6 +1563,8 @@ par_bash_parset 2
par_bash_parset 3 par_bash_parset 3
par_bash_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar myecho myvar myarr 1 myfun baz par_bash_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar myecho myvar myarr 1 myfun baz
par_bash_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar myecho myvar myarr 1 myfun baz par_bash_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar myecho myvar myarr 1 myfun baz
par_bash_parset Exit value 2 = 2
par_bash_parset Exit value 2 = 2
par_bash_man ### bash par_bash_man ### bash
par_bash_man ### From man env_parallel par_bash_man ### From man env_parallel
par_bash_man aliases with = & " ! ' work par_bash_man aliases with = & " ! ' work
@ -1630,10 +1642,12 @@ par_bash_man exit value 2 should be 2
par_bash_man Unknown option: no-such-option par_bash_man Unknown option: no-such-option
par_bash_man exit value 255 should be 255 par_bash_man exit value 255 should be 255
par_bash_funky par_bash_funky
par_bash_funky
par_bash_funky
par_bash_funky  par_bash_funky 
par_bash_funky  par_bash_funky 
par_bash_funky -funkymultiline par_bash_funky
par_bash_funky -funkymultiline par_bash_funky
par_bash_funky space 6 par_bash_funky space 6
par_bash_funky space 6 par_bash_funky space 6
par_bash_funky ' ' par_bash_funky ' '
@ -1651,6 +1665,8 @@ par_bash_funky function_works
par_bash_funky function_works_over_ssh par_bash_funky function_works_over_ssh
par_bash_funky myvar works par_bash_funky myvar works
par_bash_funky myvar works par_bash_funky myvar works
par_bash_funky -funkymultiline
par_bash_funky -funkymultiline
par_bash_environment_too_big bug #50815: env_parallel should warn if the environment is too big par_bash_environment_too_big bug #50815: env_parallel should warn if the environment is too big
par_bash_environment_too_big OK_bigvar par_bash_environment_too_big OK_bigvar
par_bash_environment_too_big OK_bigvar_remote par_bash_environment_too_big OK_bigvar_remote
@ -1819,6 +1835,8 @@ par_ash_parset newline2
par_ash_parset 1 par_ash_parset 1
par_ash_parset 2 par_ash_parset 2
par_ash_parset 3 par_ash_parset 3
par_ash_parset Exit value 2 = 2
par_ash_parset Exit value 2 = 2
par_ash_man ### ash par_ash_man ### ash
par_ash_man ### From man env_parallel par_ash_man ### From man env_parallel
par_ash_man aliases with = & " ! ' work par_ash_man aliases with = & " ! ' work

View file

@ -39,7 +39,7 @@ https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice
To silence this citation notice: run 'parallel --citation' once. To silence this citation notice: run 'parallel --citation' once.
10 files to edit 10 files to edit
[?1049h[?1h=[?12;25h[?12l[?25h[?25l"file1" [New File]~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ [?12l[?25h[?25lE173: 9 more files to edit[?12l[?25h[?1l>[?1049lAcademic tradition requires you to cite works you base your article on. [?1049h[?1h=[?12;25h[?12l[?25h[?25l"file1" [New File]~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ [?12l[?25h[?25lE173: 9 more files to edit[?12l[?25h[?1l>[?1049lAcademic tradition requires you to cite works you base your article on.
If you use programs that use GNU Parallel to process data for an article in a If you use programs that use GNU Parallel to process data for an article in a
scientific publication, please cite: scientific publication, please cite:

View file

@ -7,8 +7,6 @@ par_env_newline_backslash_bash 8
par_env_newline_backslash_csh ### Test --env for \n and \\ - single and double (*csh only) - no output is good but csh fails par_env_newline_backslash_csh ### Test --env for \n and \\ - single and double (*csh only) - no output is good but csh fails
par_env_newline_backslash_csh 2 2\ \92V2=\ \92 par_env_newline_backslash_csh 2 2\ \92V2=\ \92
par_env_newline_backslash_csh 2 2\\ \92V2=\\ \92 par_env_newline_backslash_csh 2 2\\ \92V2=\\ \92
par_env_newline_backslash_csh 2 Unmatched ".
par_env_newline_backslash_csh 2 Unmatched '"'.
par_env_newline_backslash_onall_bash ### Test --env for \n and \\ - single and double --onall (bash only) - no output is good par_env_newline_backslash_onall_bash ### Test --env for \n and \\ - single and double --onall (bash only) - no output is good
par_env_newline_backslash_onall_bash 16 par_env_newline_backslash_onall_bash 16
par_env_newline_backslash_onall_bash 16 par_env_newline_backslash_onall_bash 16
@ -17,6 +15,7 @@ par_env_newline_backslash_onall_bash 8 10
par_env_newline_backslash_onall_bash 8 10V2= par_env_newline_backslash_onall_bash 8 10V2=
par_env_newline_backslash_onall_bash 8 2\\ \92V2=\\ \92 par_env_newline_backslash_onall_bash 8 2\\ \92V2=\\ \92
par_env_newline_backslash_onall_csh ### Test --env for \n and \\ - single and double --onall (*csh only) - no output is good but csh fails par_env_newline_backslash_onall_csh ### Test --env for \n and \\ - single and double --onall (*csh only) - no output is good but csh fails
par_env_newline_backslash_onall_csh 8 Unmatched ".
par_space ### Test --env - https://savannah.gnu.org/bugs/?37351 par_space ### Test --env - https://savannah.gnu.org/bugs/?37351
par_space a 2 spaces b 1 par_space a 2 spaces b 1
par_space a 2 spaces b 1 par_space a 2 spaces b 1

File diff suppressed because it is too large Load diff

View file

@ -208,7 +208,7 @@ Job 3 of 5
Job 4 of 5 Job 4 of 5
Job 5 of 5 Job 5 of 5
parallel echo {} shell quoted is {= '$_=Q($_)' =} ::: '*/!#$' parallel echo {} shell quoted is {= '$_=Q($_)' =} ::: '*/!#$'
*/!#$ shell quoted is \*/\!\#\$ */!#$ shell quoted is '*/!#$'
parallel echo {= 'if($_==3) { skip() }' =} ::: {1..5} parallel echo {= 'if($_==3) { skip() }' =} ::: {1..5}
9 9
parallel echo {= 'if($arg[1]==$arg[2]) { skip() }' =} \ parallel echo {= 'if($arg[1]==$arg[2]) { skip() }' =} \
@ -783,6 +783,10 @@ ksh: Put this in $HOME/.kshrc: source `which env_parallel.ksh`
E.g. by doing: echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc E.g. by doing: echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc
Supports: aliases, functions, variables, arrays Supports: aliases, functions, variables, arrays
mksh: Put this in $HOME/.mkshrc: source `which env_parallel.mksh`
E.g. by doing: echo 'source `which env_parallel.mksh`' >> $HOME/.mkshrc
Supports: aliases, functions, variables, arrays
pdksh: Put this in $HOME/.profile: source `which env_parallel.pdksh` pdksh: Put this in $HOME/.profile: source `which env_parallel.pdksh`
E.g. by doing: echo '. `which env_parallel.pdksh`' >> $HOME/.profile E.g. by doing: echo '. `which env_parallel.pdksh`' >> $HOME/.profile
Supports: aliases, functions, variables, arrays Supports: aliases, functions, variables, arrays
@ -952,6 +956,10 @@ ksh: Put this in $HOME/.kshrc: source `which env_parallel.ksh`
E.g. by doing: echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc E.g. by doing: echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc
Supports: aliases, functions, variables, arrays Supports: aliases, functions, variables, arrays
mksh: Put this in $HOME/.mkshrc: source `which env_parallel.mksh`
E.g. by doing: echo 'source `which env_parallel.mksh`' >> $HOME/.mkshrc
Supports: aliases, functions, variables, arrays
pdksh: Put this in $HOME/.profile: source `which env_parallel.pdksh` pdksh: Put this in $HOME/.profile: source `which env_parallel.pdksh`
E.g. by doing: echo '. `which env_parallel.pdksh`' >> $HOME/.profile E.g. by doing: echo '. `which env_parallel.pdksh`' >> $HOME/.profile
Supports: aliases, functions, variables, arrays Supports: aliases, functions, variables, arrays
@ -987,7 +995,7 @@ For details: see man env_parallel
export -f my_func3 export -f my_func3
parallel -vv --workdir ... --nice 17 --env _ --trc {}.out \ parallel -vv --workdir ... --nice 17 --env _ --trc {}.out \
-S $SERVER1 my_func3 {} ::: abc-file -S $SERVER1 my_func3 {} ::: abc-file
ssh -l parallel lo -- mkdir -p ./.TMPWORKDIR && rsync --protocol 30 -rlDzR -essh\ -l\ parallel ./abc-file lo:./.TMPWORKDIR;ssh -l parallel lo -- exec perl -e @GNU_Parallel\\\=split/_/,\\\"use_IPC::Open3\\\;_use_MIME::Base64\\\"\\\;eval\\\"@GNU_Parallel\\\"\\\;\\\$chld\\\=\\\$SIG\\\{CHLD\\\}\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\"IGNORE\\\"\\\;my\\\$zip\\\=\\\(grep\\\{-x\\\$_\\\}\\\"/usr/local/bin/bzip2\\\"\\\)\\\[0\\\]\\\|\\\|\\\"bzip2\\\"\\\;open3\\\(\\\$in,\\\$out,\\\"\\\>\\\&STDERR\\\",\\\$zip,\\\"-dc\\\"\\\)\\\;if\\\(my\\\$perlpid\\\=fork\\\)\\\{close\\\$in\\\;\\\$eval\\\=join\\\"\\\",\\\<\\\$out\\\>\\\;close\\\$out\\\;\\\}else\\\{close\\\$out\\\;print\\\$in\\\(decode_base64\\\(join\\\"\\\",@ARGV\\\)\\\)\\\;close\\\$in\\\;exit\\\;\\\}wait\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\$chld\\\;eval\\\$eval\\\; BASE64;_EXIT_status=$?; mkdir -p ./. && rsync --protocol 30 --rsync-path=cd\ ./.TMPWORKDIR/./.\;\ rsync -rlDzR -essh\ -l\ parallel lo:./abc-file.out ./.;ssh -l parallel lo -- rm\ -f\ ./.TMPWORKDIR/abc-file\;\ sh\ -c\ rmdir\\\ ./.TMPWORKDIR/\\\ ./.parallel/tmp/\\\ ./.parallel/\\\ 2\\\>/dev/null\\\;rm\\\ -rf\\\ ./.TMPWORKDIR\\\;;ssh -l parallel lo -- rm\ -f\ ./.TMPWORKDIR/abc-file.out\;\ sh\ -c\ rmdir\\\ ./.TMPWORKDIR/\\\ ./.parallel/tmp/\\\ ./.parallel/\\\ 2\\\>/dev/null\\\;rm\\\ -rf\\\ ./.TMPWORKDIR\\\;;ssh -l parallel lo -- rm -rf .TMPWORKDIR; exit $_EXIT_status; ssh -l parallel lo -- mkdir -p ./.TMPWORKDIR && rsync --protocol 30 -rlDzR -e'ssh -l parallel' ./abc-file lo:./.TMPWORKDIR;ssh -l parallel lo -- exec perl -e "'"'@GNU_Parallel=split/_/,"use_IPC::Open3;_use_MIME::Base64";eval"@GNU_Parallel";$chld=$SIG{CHLD};$SIG{CHLD}="IGNORE";my$zip=(grep{-x$_}"/usr/local/bin/bzip2")[0]||"bzip2";open3($in,$out,">&STDERR",$zip,"-dc");if(my$perlpid=fork){close$in;$eval=join"",<$out>;close$out;}else{close$out;print$in(decode_base64(join"",@ARGV));close$in;exit;}wait;$SIG{CHLD}=$chld;eval$eval;'"'" "'"'BASE64'"'";_EXIT_status=$?; mkdir -p ./. && rsync --protocol 30 --rsync-path='cd ./.TMPWORKDIR/./.; rsync' -rlDzR -e'ssh -l parallel' lo:./abc-file.out ./.;ssh -l parallel lo -- 'rm -f ./.TMPWORKDIR/abc-file; sh -c '"'"'rmdir ./.TMPWORKDIR/ ./.parallel/tmp/ ./.parallel/ 2>/dev/null;'"'"''"'"'rm -rf ./.TMPWORKDIR;'"'";ssh -l parallel lo -- 'rm -f ./.TMPWORKDIR/abc-file.out; sh -c '"'"'rmdir ./.TMPWORKDIR/ ./.parallel/tmp/ ./.parallel/ 2>/dev/null;'"'"''"'"'rm -rf ./.TMPWORKDIR;'"'";ssh -l parallel lo -- rm -rf .TMPWORKDIR; exit $_EXIT_status;
parset myvar1,myvar2 echo ::: a b parset myvar1,myvar2 echo ::: a b
echo $myvar1 echo $myvar1
echo $myvar2 echo $myvar2
@ -1015,6 +1023,10 @@ ksh: Put this in $HOME/.kshrc: source `which env_parallel.ksh`
E.g. by doing: echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc E.g. by doing: echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc
Supports: aliases, functions, variables, arrays Supports: aliases, functions, variables, arrays
mksh: Put this in $HOME/.mkshrc: source `which env_parallel.mksh`
E.g. by doing: echo 'source `which env_parallel.mksh`' >> $HOME/.mkshrc
Supports: aliases, functions, variables, arrays
pdksh: Put this in $HOME/.profile: source `which env_parallel.pdksh` pdksh: Put this in $HOME/.profile: source `which env_parallel.pdksh`
E.g. by doing: echo '. `which env_parallel.pdksh`' >> $HOME/.profile E.g. by doing: echo '. `which env_parallel.pdksh`' >> $HOME/.profile
Supports: aliases, functions, variables, arrays Supports: aliases, functions, variables, arrays
@ -1066,6 +1078,10 @@ ksh: Put this in $HOME/.kshrc: source `which env_parallel.ksh`
E.g. by doing: echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc E.g. by doing: echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc
Supports: aliases, functions, variables, arrays Supports: aliases, functions, variables, arrays
mksh: Put this in $HOME/.mkshrc: source `which env_parallel.mksh`
E.g. by doing: echo 'source `which env_parallel.mksh`' >> $HOME/.mkshrc
Supports: aliases, functions, variables, arrays
pdksh: Put this in $HOME/.profile: source `which env_parallel.pdksh` pdksh: Put this in $HOME/.profile: source `which env_parallel.pdksh`
E.g. by doing: echo '. `which env_parallel.pdksh`' >> $HOME/.profile E.g. by doing: echo '. `which env_parallel.pdksh`' >> $HOME/.profile
Supports: aliases, functions, variables, arrays Supports: aliases, functions, variables, arrays
@ -1115,6 +1131,10 @@ ksh: Put this in $HOME/.kshrc: source `which env_parallel.ksh`
E.g. by doing: echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc E.g. by doing: echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc
Supports: aliases, functions, variables, arrays Supports: aliases, functions, variables, arrays
mksh: Put this in $HOME/.mkshrc: source `which env_parallel.mksh`
E.g. by doing: echo 'source `which env_parallel.mksh`' >> $HOME/.mkshrc
Supports: aliases, functions, variables, arrays
pdksh: Put this in $HOME/.profile: source `which env_parallel.pdksh` pdksh: Put this in $HOME/.profile: source `which env_parallel.pdksh`
E.g. by doing: echo '. `which env_parallel.pdksh`' >> $HOME/.profile E.g. by doing: echo '. `which env_parallel.pdksh`' >> $HOME/.profile
Supports: aliases, functions, variables, arrays Supports: aliases, functions, variables, arrays

View file

@ -115,10 +115,10 @@ OK
ls: /tmp/parallel.file*: No such file or directory ls: /tmp/parallel.file*: No such file or directory
OK OK
### --transfer --cleanup - multiple argument files ### --transfer --cleanup - multiple argument files
cat /tmp/parallel.file\>fire.file tmp/parallel.file\>fire.file cat '/tmp/parallel.file>fire.file' 'tmp/parallel.file>fire.file'
file>fire file>fire
file>fire file>fire
cat /tmp/parallel.file\ :\ \&\ \)\ \\n\*.jpg.file tmp/parallel.file\ :\ \&\ \)\ \\n\*.jpg.file cat '/tmp/parallel.file : & ) \n*.jpg.file' 'tmp/parallel.file : & ) \n*.jpg.file'
file : & ) \n*.jpg file : & ) \n*.jpg
file : & ) \n*.jpg file : & ) \n*.jpg
ls: /tmp/parallel.file*: No such file or directory ls: /tmp/parallel.file*: No such file or directory

View file

@ -77,27 +77,27 @@ OK
Input for ssh Input for ssh
-l parallel one-server -- mkdir -p ./. -l parallel one-server -- mkdir -p ./.
-l parallel one-server rsync --server -lDrRze.iLsfx . ./. -l parallel one-server rsync --server -lDrRze.iLsfx . ./.
-l parallel one-server -- exec perl -e @GNU_Parallel\=split/_/,\"use_IPC::Open3\;_use_MIME::Base64\"\;eval\"@GNU_Parallel\"\;\$chld\=\$SIG\{CHLD\}\;\$SIG\{CHLD\}\=\"IGNORE\"\;my\$zip\=\(grep\{-x\$_\}\"/usr/local/bin/bzip2\"\)\[0\]\|\|\"bzip2\"\;open3\(\$in,\$out,\"\>\&STDERR\",\$zip,\"-dc\"\)\;if\(my\$perlpid\=fork\)\{close\$in\;\$eval\=join\"\",\<\$out\>\;close\$out\;\}else\{close\$out\;print\$in\(decode_base64\(join\"\",@ARGV\)\)\;close\$in\;exit\;\}wait\;\$SIG\{CHLD\}\=\$chld\;eval\$eval\; base64 -l parallel one-server -- exec perl -e '@GNU_Parallel=split/_/,"use_IPC::Open3;_use_MIME::Base64";eval"@GNU_Parallel";$chld=$SIG{CHLD};$SIG{CHLD}="IGNORE";my$zip=(grep{-x$_}"/usr/local/bin/bzip2")[0]||"bzip2";open3($in,$out,">&STDERR",$zip,"-dc");if(my$perlpid=fork){close$in;$eval=join"",<$out>;close$out;}else{close$out;print$in(decode_base64(join"",@ARGV));close$in;exit;}wait;$SIG{CHLD}=$chld;eval$eval;' base64
-l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . ./parallel.file.' -l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . './parallel.file.
'newlineX.out newlineX.out'
-l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . ./parallel.file.' -l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . './parallel.file.
'newlineX.out2 newlineX.out2'
-l parallel one-server -- rm -f ./tmp/parallel.file.' -l parallel one-server -- rm -f './tmp/parallel.file.
'newlineX; sh -c rmdir\ ./tmp/\ ./\ 2\>/dev/null\; newlineX'; sh -c 'rmdir ./tmp/ ./ 2>/dev/null;'
-l parallel one-server -- rm -f ./tmp/parallel.file.' -l parallel one-server -- rm -f './tmp/parallel.file.
'newlineX.out; sh -c rmdir\ ./tmp/\ ./\ 2\>/dev/null\; newlineX.out'; sh -c 'rmdir ./tmp/ ./ 2>/dev/null;'
-l parallel one-server -- rm -f ./tmp/parallel.file.' -l parallel one-server -- rm -f './tmp/parallel.file.
'newlineX.out2; sh -c rmdir\ ./tmp/\ ./\ 2\>/dev/null\; newlineX.out2'; sh -c 'rmdir ./tmp/ ./ 2>/dev/null;'
-l parallel one-server -- mkdir -p ./. -l parallel one-server -- mkdir -p ./.
-l parallel one-server rsync --server -lDrRze.iLsfx . ./. -l parallel one-server rsync --server -lDrRze.iLsfx . ./.
-l parallel one-server -- exec perl -e @GNU_Parallel\=split/_/,\"use_IPC::Open3\;_use_MIME::Base64\"\;eval\"@GNU_Parallel\"\;\$chld\=\$SIG\{CHLD\}\;\$SIG\{CHLD\}\=\"IGNORE\"\;my\$zip\=\(grep\{-x\$_\}\"/usr/local/bin/bzip2\"\)\[0\]\|\|\"bzip2\"\;open3\(\$in,\$out,\"\>\&STDERR\",\$zip,\"-dc\"\)\;if\(my\$perlpid\=fork\)\{close\$in\;\$eval\=join\"\",\<\$out\>\;close\$out\;\}else\{close\$out\;print\$in\(decode_base64\(join\"\",@ARGV\)\)\;close\$in\;exit\;\}wait\;\$SIG\{CHLD\}\=\$chld\;eval\$eval\; base64 -l parallel one-server -- exec perl -e '@GNU_Parallel=split/_/,"use_IPC::Open3;_use_MIME::Base64";eval"@GNU_Parallel";$chld=$SIG{CHLD};$SIG{CHLD}="IGNORE";my$zip=(grep{-x$_}"/usr/local/bin/bzip2")[0]||"bzip2";open3($in,$out,">&STDERR",$zip,"-dc");if(my$perlpid=fork){close$in;$eval=join"",<$out>;close$out;}else{close$out;print$in(decode_base64(join"",@ARGV));close$in;exit;}wait;$SIG{CHLD}=$chld;eval$eval;' base64
-l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . ./parallel.file.' -l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . './parallel.file.
'newlineX.out newlineX.out'
-l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . ./parallel.file.' -l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . './parallel.file.
'newlineX.out2 newlineX.out2'
-l parallel one-server -- rm -f ./tmp/parallel.file.' -l parallel one-server -- rm -f './tmp/parallel.file.
'newlineX; sh -c rmdir\ ./tmp/\ ./\ 2\>/dev/null\; newlineX'; sh -c 'rmdir ./tmp/ ./ 2>/dev/null;'
-l parallel one-server -- rm -f ./tmp/parallel.file.' -l parallel one-server -- rm -f './tmp/parallel.file.
'newlineX.out; sh -c rmdir\ ./tmp/\ ./\ 2\>/dev/null\; newlineX.out'; sh -c 'rmdir ./tmp/ ./ 2>/dev/null;'
-l parallel one-server -- rm -f ./tmp/parallel.file.' -l parallel one-server -- rm -f './tmp/parallel.file.
'newlineX.out2; sh -c rmdir\ ./tmp/\ ./\ 2\>/dev/null\; newlineX.out2'; sh -c 'rmdir ./tmp/ ./ 2>/dev/null;'

View file

@ -1,5 +1,5 @@
### Test $PARALLEL - single line ### Test $PARALLEL - single line
1 4
1 1
1 1
centos3.tange.dk centos3.tange.dk

View file

@ -1,11 +1,11 @@
### Test --wd newtempdir/newdir/tmp/ with space dirs ### Test --wd newtempdir/newdir/tmp/ with space dirs
echo >./\ ab/c\"d/ef\ g.6 echo >'./ ab/c"d/ef g'.6
echo >\ ab/c\"d/efg.6 echo >' ab/c"d/efg'.6
echo >./b/bar.6 echo >./b/bar.6
echo >./b/foo.6 echo >./b/foo.6
echo >./\ ab\ /c\'\ d/\ ef\"g.6 echo >'./ ab /c'"'"' d/ ef"g'.6
echo >./2-col.txt.6 echo >./2-col.txt.6
echo >./a\ b/cd\ /\ ef/efg.6 echo >'./a b/cd / ef/efg'.6
./ ab /c' d/ ef"g.6 ./ ab /c' d/ ef"g.6
./ ab/c"d/ef g.6 ./ ab/c"d/ef g.6
./ ab/c"d/efg.6 ./ ab/c"d/efg.6
@ -14,13 +14,13 @@ echo >./a\ b/cd\ /\ ef/efg.6
./b/bar.6 ./b/bar.6
./b/foo.6 ./b/foo.6
### Test --wd /tmp/newtempdir/newdir/tmp/ with space dirs ### Test --wd /tmp/newtempdir/newdir/tmp/ with space dirs
echo >./\ ab/c\"d/ef\ g.7 echo >'./ ab/c"d/ef g'.7
echo >\ ab/c\"d/efg.7 echo >' ab/c"d/efg'.7
echo >./b/bar.7 echo >./b/bar.7
echo >./b/foo.7 echo >./b/foo.7
echo >./\ ab\ /c\'\ d/\ ef\"g.7 echo >'./ ab /c'"'"' d/ ef"g'.7
echo >./2-col.txt.7 echo >./2-col.txt.7
echo >./a\ b/cd\ /\ ef/efg.7 echo >'./a b/cd / ef/efg'.7
./ ab /c' d/ ef"g.7 ./ ab /c' d/ ef"g.7
./ ab/c"d/ef g.7 ./ ab/c"d/ef g.7
./ ab/c"d/efg.7 ./ ab/c"d/efg.7
@ -34,13 +34,13 @@ echo >./a\ b/cd\ /\ ef/efg.7
echo >2-col.txt.2 echo >2-col.txt.2
./2-col.txt.2 ./2-col.txt.2
### Test --wd ... with space dirs ### Test --wd ... with space dirs
echo >./\ ab/c\"d/ef\ g.3 echo >'./ ab/c"d/ef g'.3
echo >\ ab/c\"d/efg.3 echo >' ab/c"d/efg'.3
echo >./b/bar.3 echo >./b/bar.3
echo >./b/foo.3 echo >./b/foo.3
echo >./\ ab\ /c\'\ d/\ ef\"g.3 echo >'./ ab /c'"'"' d/ ef"g'.3
echo >./2-col.txt.3 echo >./2-col.txt.3
echo >./a\ b/cd\ /\ ef/efg.3 echo >'./a b/cd / ef/efg'.3
./ ab /c' d/ ef"g.3 ./ ab /c' d/ ef"g.3
./ ab/c"d/ef g.3 ./ ab/c"d/ef g.3
./ ab/c"d/efg.3 ./ ab/c"d/efg.3
@ -52,13 +52,13 @@ echo >./a\ b/cd\ /\ ef/efg.3
echo >2-col.txt.4 echo >2-col.txt.4
./2-col.txt.4 ./2-col.txt.4
### Test --wd /tmp/ with space dirs ### Test --wd /tmp/ with space dirs
echo >./\ ab/c\"d/ef\ g.5 echo >'./ ab/c"d/ef g'.5
echo >\ ab/c\"d/efg.5 echo >' ab/c"d/efg'.5
echo >./b/bar.5 echo >./b/bar.5
echo >./b/foo.5 echo >./b/foo.5
echo >./\ ab\ /c\'\ d/\ ef\"g.5 echo >'./ ab /c'"'"' d/ ef"g'.5
echo >./2-col.txt.5 echo >./2-col.txt.5
echo >./a\ b/cd\ /\ ef/efg.5 echo >'./a b/cd / ef/efg'.5
./ ab /c' d/ ef"g.5 ./ ab /c' d/ ef"g.5
./ ab/c"d/ef g.5 ./ ab/c"d/ef g.5
./ ab/c"d/efg.5 ./ ab/c"d/efg.5

View file

@ -1,13 +1,13 @@
echo '### Test --return of weirdly named file' echo '### Test --return of weirdly named file'
### Test --return of weirdly named file ### Test --return of weirdly named file
stdout parallel --return {} -vv -S parallel\@parallel-server1 echo '>'{} ::: 'aa<${#}" b' | perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-z+=/\\0-9]{500,}:base64:i;'; rm 'aa<${#}" b' stdout parallel --return {} -vv -S parallel\@parallel-server1 echo '>'{} ::: 'aa<${#}" b' | perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-z+=/\\0-9]{500,}:base64:i;'; rm 'aa<${#}" b'
ssh -l parallel one-server -- exec perl -e @GNU_Parallel\\\=split/_/,\\\"use_IPC::Open3\\\;_use_MIME::Base64\\\"\\\;eval\\\"@GNU_Parallel\\\"\\\;\\\$chld\\\=\\\$SIG\\\{CHLD\\\}\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\"IGNORE\\\"\\\;my\\\$zip\\\=\\\(grep\\\{-x\\\$_\\\}\\\"/usr/local/bin/bzip2\\\"\\\)\\\[0\\\]\\\|\\\|\\\"bzip2\\\"\\\;open3\\\(\\\$in,\\\$out,\\\"\\\>\\\&STDERR\\\",\\\$zip,\\\"-dc\\\"\\\)\\\;if\\\(my\\\$perlpid\\\=fork\\\)\\\{close\\\$in\\\;\\\$eval\\\=join\\\"\\\",\\\<\\\$out\\\>\\\;close\\\$out\\\;\\\}else\\\{close\\\$out\\\;print\\\$in\\\(decode_base64\\\(join\\\"\\\",@ARGV\\\)\\\)\\\;close\\\$in\\\;exit\\\;\\\}wait\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\$chld\\\;eval\\\$eval\\\; base64;_EXIT_status=$?; mkdir -p ./. && rsync --protocol 30 --rsync-path=cd\ ././.\;\ rsync -rlDzR -essh\ -l\ parallel parallel-server1:./aa\\\<\\\$\\\{\\\#\\\}\\\"\\\ b ./.; exit $_EXIT_status; ssh -l parallel one-server -- exec 'perl -e '"'"'$ENV{"PARALLEL_PID"}="XXXXX";$ENV{"PARALLEL_SEQ"}="1";$bashfunc = "";@ARGV="echo >'"'"'"'"'"'"'"'"'aa<\${#}\" b'"'"'"'"'"'"'"'"'";$shell="$ENV{SHELL}";$tmpdir="/tmp/test61-tmpdir";$nice=0;do{$ENV{PARALLEL_TMP}=$tmpdir."/par".join"",map{(0..9,"a".."z","A".."Z")[rand(62)]}(1..5);}while(-e$ENV{PARALLEL_TMP});$SIG{CHLD}=sub{$done=1;};$pid=fork;unless($pid){eval{setpgrp};eval{setpriority(0,0,$nice)};exec$shell,"-c",($bashfunc."@ARGV");die"exec:$!\n";}do{$s=$s<1?0.001+$s*1.03:$s;select(undef,undef,undef,$s);}until($done||getppid==1);kill(SIGHUP,-${pid})unless$done;wait;exit($?&127?128+($?&127):1+$?>>8)'"'";_EXIT_status=$?; mkdir -p ./. && rsync --protocol 30 --rsync-path='cd ././.; rsync' -rlDzR -e'ssh -l parallel' parallel-server1:"'"'./aa<${#}" b'"'" ./.; exit $_EXIT_status;
echo '### Test if remote login shell is csh' echo '### Test if remote login shell is csh'
### Test if remote login shell is csh ### Test if remote login shell is csh
stdout parallel -k -vv -S csh@localhost 'echo $PARALLEL_PID $PARALLEL_SEQ {}| wc -w' ::: a b c | perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-z+=/\\0-9]{500,}:base64:i;' stdout parallel -k -vv -S csh@localhost 'echo $PARALLEL_PID $PARALLEL_SEQ {}| wc -w' ::: a b c | perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-z+=/\\0-9]{500,}:base64:i;'
ssh -l csh localhost -- exec perl -e @GNU_Parallel\\\=split/_/,\\\"use_IPC::Open3\\\;_use_MIME::Base64\\\"\\\;eval\\\"@GNU_Parallel\\\"\\\;\\\$chld\\\=\\\$SIG\\\{CHLD\\\}\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\"IGNORE\\\"\\\;my\\\$zip\\\=\\\(grep\\\{-x\\\$_\\\}\\\"/usr/local/bin/bzip2\\\"\\\)\\\[0\\\]\\\|\\\|\\\"bzip2\\\"\\\;open3\\\(\\\$in,\\\$out,\\\"\\\>\\\&STDERR\\\",\\\$zip,\\\"-dc\\\"\\\)\\\;if\\\(my\\\$perlpid\\\=fork\\\)\\\{close\\\$in\\\;\\\$eval\\\=join\\\"\\\",\\\<\\\$out\\\>\\\;close\\\$out\\\;\\\}else\\\{close\\\$out\\\;print\\\$in\\\(decode_base64\\\(join\\\"\\\",@ARGV\\\)\\\)\\\;close\\\$in\\\;exit\\\;\\\}wait\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\$chld\\\;eval\\\$eval\\\; base64; ssh -l csh localhost -- exec 'perl -e '"'"'$ENV{"PARALLEL_PID"}="XXXXX";$ENV{"PARALLEL_SEQ"}="1";$bashfunc = "";@ARGV="echo \$PARALLEL_PID \$PARALLEL_SEQ a| wc -w";$shell="$ENV{SHELL}";$tmpdir="/tmp/test61-tmpdir";$nice=0;do{$ENV{PARALLEL_TMP}=$tmpdir."/par".join"",map{(0..9,"a".."z","A".."Z")[rand(62)]}(1..5);}while(-e$ENV{PARALLEL_TMP});$SIG{CHLD}=sub{$done=1;};$pid=fork;unless($pid){eval{setpgrp};eval{setpriority(0,0,$nice)};exec$shell,"-c",($bashfunc."@ARGV");die"exec:$!\n";}do{$s=$s<1?0.001+$s*1.03:$s;select(undef,undef,undef,$s);}until($done||getppid==1);kill(SIGHUP,-${pid})unless$done;wait;exit($?&127?128+($?&127):1+$?>>8)'"'";
3 3
ssh -l csh localhost -- exec perl -e @GNU_Parallel\\\=split/_/,\\\"use_IPC::Open3\\\;_use_MIME::Base64\\\"\\\;eval\\\"@GNU_Parallel\\\"\\\;\\\$chld\\\=\\\$SIG\\\{CHLD\\\}\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\"IGNORE\\\"\\\;my\\\$zip\\\=\\\(grep\\\{-x\\\$_\\\}\\\"/usr/local/bin/bzip2\\\"\\\)\\\[0\\\]\\\|\\\|\\\"bzip2\\\"\\\;open3\\\(\\\$in,\\\$out,\\\"\\\>\\\&STDERR\\\",\\\$zip,\\\"-dc\\\"\\\)\\\;if\\\(my\\\$perlpid\\\=fork\\\)\\\{close\\\$in\\\;\\\$eval\\\=join\\\"\\\",\\\<\\\$out\\\>\\\;close\\\$out\\\;\\\}else\\\{close\\\$out\\\;print\\\$in\\\(decode_base64\\\(join\\\"\\\",@ARGV\\\)\\\)\\\;close\\\$in\\\;exit\\\;\\\}wait\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\$chld\\\;eval\\\$eval\\\; base64; ssh -l csh localhost -- exec 'perl -e '"'"'$ENV{"PARALLEL_PID"}="XXXXX";$ENV{"PARALLEL_SEQ"}="2";$bashfunc = "";@ARGV="echo \$PARALLEL_PID \$PARALLEL_SEQ b| wc -w";$shell="$ENV{SHELL}";$tmpdir="/tmp/test61-tmpdir";$nice=0;do{$ENV{PARALLEL_TMP}=$tmpdir."/par".join"",map{(0..9,"a".."z","A".."Z")[rand(62)]}(1..5);}while(-e$ENV{PARALLEL_TMP});$SIG{CHLD}=sub{$done=1;};$pid=fork;unless($pid){eval{setpgrp};eval{setpriority(0,0,$nice)};exec$shell,"-c",($bashfunc."@ARGV");die"exec:$!\n";}do{$s=$s<1?0.001+$s*1.03:$s;select(undef,undef,undef,$s);}until($done||getppid==1);kill(SIGHUP,-${pid})unless$done;wait;exit($?&127?128+($?&127):1+$?>>8)'"'";
3 3
ssh -l csh localhost -- exec perl -e @GNU_Parallel\\\=split/_/,\\\"use_IPC::Open3\\\;_use_MIME::Base64\\\"\\\;eval\\\"@GNU_Parallel\\\"\\\;\\\$chld\\\=\\\$SIG\\\{CHLD\\\}\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\"IGNORE\\\"\\\;my\\\$zip\\\=\\\(grep\\\{-x\\\$_\\\}\\\"/usr/local/bin/bzip2\\\"\\\)\\\[0\\\]\\\|\\\|\\\"bzip2\\\"\\\;open3\\\(\\\$in,\\\$out,\\\"\\\>\\\&STDERR\\\",\\\$zip,\\\"-dc\\\"\\\)\\\;if\\\(my\\\$perlpid\\\=fork\\\)\\\{close\\\$in\\\;\\\$eval\\\=join\\\"\\\",\\\<\\\$out\\\>\\\;close\\\$out\\\;\\\}else\\\{close\\\$out\\\;print\\\$in\\\(decode_base64\\\(join\\\"\\\",@ARGV\\\)\\\)\\\;close\\\$in\\\;exit\\\;\\\}wait\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\$chld\\\;eval\\\$eval\\\; base64; ssh -l csh localhost -- exec 'perl -e '"'"'$ENV{"PARALLEL_PID"}="XXXXX";$ENV{"PARALLEL_SEQ"}="3";$bashfunc = "";@ARGV="echo \$PARALLEL_PID \$PARALLEL_SEQ c| wc -w";$shell="$ENV{SHELL}";$tmpdir="/tmp/test61-tmpdir";$nice=0;do{$ENV{PARALLEL_TMP}=$tmpdir."/par".join"",map{(0..9,"a".."z","A".."Z")[rand(62)]}(1..5);}while(-e$ENV{PARALLEL_TMP});$SIG{CHLD}=sub{$done=1;};$pid=fork;unless($pid){eval{setpgrp};eval{setpriority(0,0,$nice)};exec$shell,"-c",($bashfunc."@ARGV");die"exec:$!\n";}do{$s=$s<1?0.001+$s*1.03:$s;select(undef,undef,undef,$s);}until($done||getppid==1);kill(SIGHUP,-${pid})unless$done;wait;exit($?&127?128+($?&127):1+$?>>8)'"'";
3 3