mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-12-04 11:57:55 +00:00
Compare commits
5 commits
e1826c91c8
...
b4b3da4b0f
Author | SHA1 | Date | |
---|---|---|---|
b4b3da4b0f | |||
e5281f89c9 | |||
eedb8b61b5 | |||
9321ac863a | |||
56b5e8cb05 |
|
@ -14,6 +14,10 @@ License: GPL-3.0-or-later
|
|||
Files: doc/citation-notice-faq.txt CREDITS NEWS README src/parallel_cheat_bw.fodt packager/debian/README doc/parallel*directive doc/screenshot.png
|
||||
Copyright: 2007-2022 Ole Tange, http://ole.tange.dk and Free Software Foundation, Inc.
|
||||
License: GFDL-1.3-or-later
|
||||
|
||||
Files: doc/citation-notice-faq.txt CREDITS NEWS README src/parallel_cheat_bw.fodt packager/debian/README doc/parallel*directive doc/screenshot.png
|
||||
Copyright: 2007-2022 Ole Tange, http://ole.tange.dk and Free Software Foundation, Inc.
|
||||
# Dual license - copy of the previous paragraph
|
||||
License: CC-BY-SA-4.0
|
||||
|
||||
Files: testsuite/input-files/perl-v5.14.2/* testsuite/input-files/perllib/*
|
||||
|
|
26
NEWS
26
NEWS
|
@ -1,3 +1,29 @@
|
|||
20240722
|
||||
|
||||
New in this release:
|
||||
|
||||
* No new features. This is a candidate for a stable release.
|
||||
|
||||
* Bug fixes and man page updates.
|
||||
|
||||
News about GNU Parallel:
|
||||
|
||||
* Scientific Workflows at Scale using GNU Parallel
|
||||
https://web.cvent.com/event/f318e73c-2230-432a-a044-b75625020543/websitePage:afd80266-008e-414b-9f94-2fd9b4dd1924?session=fe79a785-ec60-414c-8d2b-c29208f53d4c&shareLink=true
|
||||
|
||||
* Use GNU Parallel to render blender movies distributed by a bunch of
|
||||
nodes https://github.com/tfmoraes/blender_gnu_parallel_render
|
||||
|
||||
* Lessons Learned from Scaling to Multi-Terabyte Datasets
|
||||
https://v2thegreat.com/2024/06/19/lessons-learned-from-scaling-to-multi-terabyte-datasets/
|
||||
|
||||
* Efisiensi Maksimal: Cara Paralelisasi Perintah di CLI Linux
|
||||
https://medium.com/@nfrozi/efisiensi-maksimal-cara-paralelisasi-perintah-di-cli-linux-f4fda3afe2a0
|
||||
|
||||
* Introduction to GNU parallel
|
||||
https://datascience.101workbook.org/06-hpc/06-parallel/01-intro-to-gnu-parallel/#gsc.tab=0
|
||||
|
||||
|
||||
20240622
|
||||
|
||||
New in this release:
|
||||
|
|
24
README
24
README
|
@ -57,11 +57,11 @@ document.
|
|||
|
||||
Full installation of GNU Parallel is as simple as:
|
||||
|
||||
wget https://ftpmirror.gnu.org/parallel/parallel-20240622.tar.bz2
|
||||
wget https://ftpmirror.gnu.org/parallel/parallel-20240622.tar.bz2.sig
|
||||
gpg parallel-20240622.tar.bz2.sig
|
||||
bzip2 -dc parallel-20240622.tar.bz2 | tar xvf -
|
||||
cd parallel-20240622
|
||||
wget https://ftpmirror.gnu.org/parallel/parallel-20240722.tar.bz2
|
||||
wget https://ftpmirror.gnu.org/parallel/parallel-20240722.tar.bz2.sig
|
||||
gpg parallel-20240722.tar.bz2.sig
|
||||
bzip2 -dc parallel-20240722.tar.bz2 | tar xvf -
|
||||
cd parallel-20240722
|
||||
./configure && make && sudo make install
|
||||
|
||||
|
||||
|
@ -70,11 +70,11 @@ Full installation of GNU Parallel is as simple as:
|
|||
If you are not root you can add ~/bin to your path and install in
|
||||
~/bin and ~/share:
|
||||
|
||||
wget https://ftpmirror.gnu.org/parallel/parallel-20240622.tar.bz2
|
||||
wget https://ftpmirror.gnu.org/parallel/parallel-20240622.tar.bz2.sig
|
||||
gpg parallel-20240622.tar.bz2.sig
|
||||
bzip2 -dc parallel-20240622.tar.bz2 | tar xvf -
|
||||
cd parallel-20240622
|
||||
wget https://ftpmirror.gnu.org/parallel/parallel-20240722.tar.bz2
|
||||
wget https://ftpmirror.gnu.org/parallel/parallel-20240722.tar.bz2.sig
|
||||
gpg parallel-20240722.tar.bz2.sig
|
||||
bzip2 -dc parallel-20240722.tar.bz2 | tar xvf -
|
||||
cd parallel-20240722
|
||||
./configure --prefix=$HOME && make && make install
|
||||
|
||||
Or if your system lacks 'make' you can simply copy src/parallel
|
||||
|
@ -122,8 +122,8 @@ will love you for it.
|
|||
When using programs that use GNU Parallel to process data for
|
||||
publication please cite:
|
||||
|
||||
Tange, O. (2024, June 22). GNU Parallel 20240622 ('34 counts').
|
||||
Zenodo. https://doi.org/10.5281/zenodo.12518196
|
||||
Tange, O. (2024, July 22). GNU Parallel 20240722 ('Assange').
|
||||
Zenodo. https://doi.org/10.5281/zenodo.12789352
|
||||
|
||||
Copyright (C) 2007-2022 Ole Tange, http://ole.tange.dk and Free
|
||||
Software Foundation, Inc.
|
||||
|
|
20
configure
vendored
20
configure
vendored
|
@ -1,6 +1,6 @@
|
|||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.71 for parallel 20240622.
|
||||
# Generated by GNU Autoconf 2.71 for parallel 20240722.
|
||||
#
|
||||
# Report bugs to <bug-parallel@gnu.org>.
|
||||
#
|
||||
|
@ -610,8 +610,8 @@ MAKEFLAGS=
|
|||
# Identity of this package.
|
||||
PACKAGE_NAME='parallel'
|
||||
PACKAGE_TARNAME='parallel'
|
||||
PACKAGE_VERSION='20240622'
|
||||
PACKAGE_STRING='parallel 20240622'
|
||||
PACKAGE_VERSION='20240722'
|
||||
PACKAGE_STRING='parallel 20240722'
|
||||
PACKAGE_BUGREPORT='bug-parallel@gnu.org'
|
||||
PACKAGE_URL=''
|
||||
|
||||
|
@ -1246,7 +1246,7 @@ if test "$ac_init_help" = "long"; then
|
|||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures parallel 20240622 to adapt to many kinds of systems.
|
||||
\`configure' configures parallel 20240722 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
|
@ -1313,7 +1313,7 @@ fi
|
|||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of parallel 20240622:";;
|
||||
short | recursive ) echo "Configuration of parallel 20240722:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
|
@ -1390,7 +1390,7 @@ fi
|
|||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
parallel configure 20240622
|
||||
parallel configure 20240722
|
||||
generated by GNU Autoconf 2.71
|
||||
|
||||
Copyright (C) 2021 Free Software Foundation, Inc.
|
||||
|
@ -1427,7 +1427,7 @@ cat >config.log <<_ACEOF
|
|||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by parallel $as_me 20240622, which was
|
||||
It was created by parallel $as_me 20240722, which was
|
||||
generated by GNU Autoconf 2.71. Invocation command line was
|
||||
|
||||
$ $0$ac_configure_args_raw
|
||||
|
@ -2379,7 +2379,7 @@ fi
|
|||
|
||||
# Define the identity of the package.
|
||||
PACKAGE='parallel'
|
||||
VERSION='20240622'
|
||||
VERSION='20240722'
|
||||
|
||||
|
||||
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
|
||||
|
@ -3026,7 +3026,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
|||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
ac_log="
|
||||
This file was extended by parallel $as_me 20240622, which was
|
||||
This file was extended by parallel $as_me 20240722, which was
|
||||
generated by GNU Autoconf 2.71. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
|
@ -3090,7 +3090,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
|
|||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config='$ac_cs_config_escaped'
|
||||
ac_cs_version="\\
|
||||
parallel config.status 20240622
|
||||
parallel config.status 20240722
|
||||
configured by $0, generated by GNU Autoconf 2.71,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
AC_INIT([parallel],[20240622],[bug-parallel@gnu.org])
|
||||
AC_INIT([parallel],[20240722],[bug-parallel@gnu.org])
|
||||
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
AC_CONFIG_FILES([
|
||||
|
|
15
doc/haikus
15
doc/haikus
|
@ -15,14 +15,14 @@ Output is in sync
|
|||
write a haiku about gnu parallel and the :::+ option
|
||||
|
||||
|
||||
o GNU Parallel é muito foda, acabei de usar ele pra dividir um CSV
|
||||
-- @pumpkin_link@twitter Johnny Cage.dev
|
||||
|
||||
GNU Parallel and Tmux are the two tools I rely on daily for my work. Indispensable.
|
||||
-- @mitchelvalentino1569@YouTube
|
||||
|
||||
|
||||
parallel is frickin great for launching jobs on multiple
|
||||
machines. Ansible and Jenkins and others may be good too but I was
|
||||
able to jump right in with parallel.
|
||||
-- dwhite21787@reddit
|
||||
今始めて知ったが GNU parallel ってコマンドクソ便利じゃん。なんで今まで自分のアンテナに引っかからなかったんだろう…。
|
||||
-- @kawaz@twitter Yoshiaki Kawazu
|
||||
|
||||
Big fan of GNU parallel!
|
||||
-- lovelyloafers@reddit
|
||||
|
@ -221,6 +221,11 @@ https://negfeedback.blogspot.com/2020/05/indispensable-command-line-tools.html
|
|||
|
||||
=== Used ===
|
||||
|
||||
parallel is frickin great for launching jobs on multiple
|
||||
machines. Ansible and Jenkins and others may be good too but I was
|
||||
able to jump right in with parallel.
|
||||
-- dwhite21787@reddit
|
||||
|
||||
The most glorious 15,000 lines of Perl ever written.
|
||||
-- @nibblrrr7124@YouTube
|
||||
|
||||
|
|
|
@ -245,14 +245,10 @@ http://freshmeat.net/projects/parallel/releases/new
|
|||
|
||||
https://hostux.social/@GNU_Parallel
|
||||
|
||||
# Dead: https://joindiaspora.com/stream
|
||||
|
||||
New release of #GNU Parallel pi.dk/0
|
||||
New in this release pi.dk/2
|
||||
See the intro videos pi.dk/1
|
||||
10 secs installation: https://git.savannah.gnu.org/cgit/parallel.git/tree/README
|
||||
|
||||
Aspect: Public
|
||||
10 secs installation: pi.dk/3
|
||||
|
||||
GNU Parallel - for people who live life in the parallel lane.
|
||||
|
||||
|
@ -272,24 +268,34 @@ from:tange@gnu.org
|
|||
to:parallel@gnu.org, bug-parallel@gnu.org
|
||||
stable-bcc: Jesse Alama <jessealama@fastmail.fm>
|
||||
|
||||
Subject: GNU Parallel 20240622 ('34 counts') released
|
||||
Subject: GNU Parallel 20240722 ('Assange') released [stable]
|
||||
|
||||
GNU Parallel 20240622 ('34 counts') has been released. It is available for download at: lbry://@GnuParallel:4
|
||||
GNU Parallel 20240722 ('Assange') has been released. It is available for download at: lbry://@GnuParallel:4
|
||||
|
||||
Quote of the month:
|
||||
|
||||
The most glorious 15,000 lines of Perl ever written.
|
||||
-- @nibblrrr7124@YouTube
|
||||
|
||||
parallel is frickin great for launching jobs on multiple
|
||||
machines. Ansible and Jenkins and others may be good too but I was
|
||||
able to jump right in with parallel.
|
||||
-- dwhite21787@reddit
|
||||
|
||||
New in this release:
|
||||
|
||||
* No new features. This is a candidate for a stable release.
|
||||
|
||||
* Bug fixes and man page updates.
|
||||
|
||||
News about GNU Parallel:
|
||||
|
||||
* Howto - Parallel: lanciare comandi in simultanea https://github.com/linuxhubit/linuxhub.it/blob/main/_posts/2024-06-14-howto-parallel-per-lanciare-comandi-in-simultanea.md
|
||||
* Scientific Workflows at Scale using GNU Parallel https://web.cvent.com/event/f318e73c-2230-432a-a044-b75625020543/websitePage:afd80266-008e-414b-9f94-2fd9b4dd1924?session=fe79a785-ec60-414c-8d2b-c29208f53d4c&shareLink=true
|
||||
|
||||
* Implementing Concurrency in Shell Scripts https://dev.to/siddhantkcode/implementing-concurrency-in-shell-scripts-521o
|
||||
* Use GNU Parallel to render blender movies distributed by a bunch of nodes https://github.com/tfmoraes/blender_gnu_parallel_render
|
||||
|
||||
* Lessons Learned from Scaling to Multi-Terabyte Datasets https://v2thegreat.com/2024/06/19/lessons-learned-from-scaling-to-multi-terabyte-datasets/
|
||||
|
||||
* Efisiensi Maksimal: Cara Paralelisasi Perintah di CLI Linux https://medium.com/@nfrozi/efisiensi-maksimal-cara-paralelisasi-perintah-di-cli-linux-f4fda3afe2a0
|
||||
|
||||
* Introduction to GNU parallel https://datascience.101workbook.org/06-hpc/06-parallel/01-intro-to-gnu-parallel/#gsc.tab=0
|
||||
|
||||
|
||||
GNU Parallel - For people who live life in the parallel lane.
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<directory name="parallel" rev="389" vrev="2" srcmd5="8dc4fed077745f6e2807891e42f73703">
|
||||
<directory name="parallel" rev="390" vrev="2" srcmd5="491dbee376ddabe7e9acf3e6dd268f7b">
|
||||
<entry name="Makefile" md5="a165cdcca90c744dc5a5b17cde72ad8e" size="1182" mtime="1698101769" />
|
||||
<entry name="PKGBUILD" md5="d9d67ae64d3839f14e461846f34ac714" size="714" mtime="1719249737" />
|
||||
<entry name="parallel-20240622.tar.bz2" md5="68ff354e027014e83570e44895b4cf66" size="2570487" mtime="1719249790" />
|
||||
<entry name="parallel.spec" md5="2df5ce1371be81fb1a3cb5f3f9fda974" size="6224" mtime="1719249792" />
|
||||
<entry name="parallel_20240622.dsc" md5="ed82106cb7f6002906855500479977e2" size="556" mtime="1719249793" />
|
||||
<entry name="parallel_20240622.tar.gz" md5="6ce704b44dfcd122c98aaaa4d06a51c5" size="2840248" mtime="1719249808" />
|
||||
<entry name="PKGBUILD" md5="16b2780a64ee18b0df1060680cec804c" size="714" mtime="1721531636" />
|
||||
<entry name="parallel-20240722.tar.bz2" md5="e6bdcd2fa790b2096665ed05850bbe53" size="2617438" mtime="1721531681" />
|
||||
<entry name="parallel.spec" md5="d49c3a3bd1906e68ad98cf2377b3d8ea" size="6224" mtime="1721531682" />
|
||||
<entry name="parallel_20240722.dsc" md5="13bb25db4380d128d45b57f95d1422e0" size="556" mtime="1721531683" />
|
||||
<entry name="parallel_20240722.tar.gz" md5="0229f60e3fe8aabc84dd7a908ff6bb11" size="2883193" mtime="1721531695" />
|
||||
</directory>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
Summary: Shell tool for executing jobs in parallel
|
||||
Name: parallel
|
||||
Version: 20240622
|
||||
Version: 20240722
|
||||
Release: 2.1
|
||||
License: GPL-3.0-or-later
|
||||
Group: Productivity/File utilities
|
||||
|
|
|
@ -601,7 +601,7 @@ _parset_main() {
|
|||
fi
|
||||
if [ "$_parset_NAME" = "--version" ] ; then
|
||||
# shellcheck disable=SC2006
|
||||
echo "parset 20240622 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "parset 20240722 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "Copyright (C) 2007-2024 Ole Tange, http://ole.tange.dk and Free Software"
|
||||
echo "Foundation, Inc."
|
||||
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
|
||||
|
|
|
@ -605,7 +605,7 @@ _parset_main() {
|
|||
fi
|
||||
if [ "$_parset_NAME" = "--version" ] ; then
|
||||
# shellcheck disable=SC2006
|
||||
echo "parset 20240622 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "parset 20240722 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "Copyright (C) 2007-2024 Ole Tange, http://ole.tange.dk and Free Software"
|
||||
echo "Foundation, Inc."
|
||||
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
|
||||
|
|
|
@ -30,8 +30,14 @@
|
|||
|
||||
set _parallel_exit_CODE=0
|
||||
if ("`alias env_parallel`" == '' || ! $?PARALLEL_CSH) then
|
||||
# Activate alias
|
||||
alias env_parallel '(setenv PARALLEL_CSH "\!*"; source `which env_parallel.csh`)'
|
||||
set _parallel_eNv_pAtH=`which env_parallel.csh`
|
||||
if ( $status == 0 ) then
|
||||
# Activate alias
|
||||
alias env_parallel '(setenv PARALLEL_CSH "\!*"; source '$_parallel_eNv_pAtH')'
|
||||
unset _parallel_eNv_pAtH
|
||||
else
|
||||
echo 'env_parallel: Error: env_parallel.csh must be in $PATH ('$PATH')'
|
||||
endif
|
||||
else
|
||||
# Get the --env variables if set
|
||||
# --env _ should be ignored
|
||||
|
|
|
@ -601,7 +601,7 @@ _parset_main() {
|
|||
fi
|
||||
if [ "$_parset_NAME" = "--version" ] ; then
|
||||
# shellcheck disable=SC2006
|
||||
echo "parset 20240622 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "parset 20240722 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "Copyright (C) 2007-2024 Ole Tange, http://ole.tange.dk and Free Software"
|
||||
echo "Foundation, Inc."
|
||||
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
|
||||
|
|
|
@ -129,7 +129,8 @@ function env_parallel
|
|||
perl -ne 'chomp;
|
||||
($name,$val)=split(/ /,$_,2);
|
||||
$name=~/^(HOME|USER|COLUMNS|FISH_VERSION|LINES|PWD|SHLVL|_|
|
||||
history|status|version)$|\./x and next;
|
||||
fish_kill_signal|fish_pid|history|hostname|status|
|
||||
status_generation|version)$|\./x and next;
|
||||
if($val=~/^'"'"'/) { next; }
|
||||
print "set $name \"\$$name\";\n";
|
||||
')
|
||||
|
@ -160,7 +161,8 @@ function env_parallel
|
|||
($name,$val)=split(/ /,$_,2);
|
||||
# Ignore read-only vars
|
||||
$name=~/^(HOME|USER|COLUMNS|FISH_VERSION|LINES|PWD|SHLVL|_|
|
||||
fish_pid|history|hostname|status|version)$/x and next;
|
||||
fish_kill_signal|fish_pid|history|hostname|status|
|
||||
status_generation|version)$/x and next;
|
||||
# Single quote $val
|
||||
if($val =~ /[^-_.+a-z0-9\/]/i) {
|
||||
$val =~ s/\047/\047"\047"\047/g; # "-quote single quotes
|
||||
|
|
|
@ -601,7 +601,7 @@ _parset_main() {
|
|||
fi
|
||||
if [ "$_parset_NAME" = "--version" ] ; then
|
||||
# shellcheck disable=SC2006
|
||||
echo "parset 20240622 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "parset 20240722 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "Copyright (C) 2007-2024 Ole Tange, http://ole.tange.dk and Free Software"
|
||||
echo "Foundation, Inc."
|
||||
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
|
||||
|
|
|
@ -570,7 +570,7 @@ _parset_main() {
|
|||
fi
|
||||
if [ "$_parset_NAME" = "--version" ] ; then
|
||||
# shellcheck disable=SC2006
|
||||
echo "parset 20240622 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "parset 20240722 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "Copyright (C) 2007-2024 Ole Tange, http://ole.tange.dk and Free Software"
|
||||
echo "Foundation, Inc."
|
||||
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
|
||||
|
|
|
@ -275,7 +275,7 @@ Due to a bug in Bash, aliases containing newlines must be followed by
|
|||
a newline in the command. Some systems are not affected by this bug,
|
||||
but will print a warning anyway.
|
||||
|
||||
=head2 csh
|
||||
=head2 csh (alpha testing)
|
||||
|
||||
B<env_parallel> for B<csh> breaks B<$PARALLEL>, so do not use
|
||||
B<$PARALLEL>.
|
||||
|
@ -384,7 +384,7 @@ B<--session> is supported.
|
|||
=back
|
||||
|
||||
|
||||
=head2 fish
|
||||
=head2 fish (alpha testing)
|
||||
|
||||
=head3 Installation
|
||||
|
||||
|
@ -434,6 +434,8 @@ B<--session> is supported.
|
|||
|
||||
=item arrays
|
||||
|
||||
Arrays normally work, but fail intermitently.
|
||||
|
||||
set myarray arrays work, too
|
||||
env_parallel -k echo '$myarray[{}]' ::: 1 2 3
|
||||
env_parallel -k -S server echo '$myarray[{}]' ::: 1 2 3
|
||||
|
@ -677,7 +679,7 @@ B<--session> is supported.
|
|||
=back
|
||||
|
||||
|
||||
=head2 tcsh
|
||||
=head2 tcsh (alpha testing)
|
||||
|
||||
B<env_parallel> for B<tcsh> breaks B<$PARALLEL>, so do not use
|
||||
B<$PARALLEL>.
|
||||
|
|
|
@ -601,7 +601,7 @@ _parset_main() {
|
|||
fi
|
||||
if [ "$_parset_NAME" = "--version" ] ; then
|
||||
# shellcheck disable=SC2006
|
||||
echo "parset 20240622 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "parset 20240722 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "Copyright (C) 2007-2024 Ole Tange, http://ole.tange.dk and Free Software"
|
||||
echo "Foundation, Inc."
|
||||
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
|
||||
|
|
|
@ -30,8 +30,15 @@
|
|||
|
||||
set _parallel_exit_CODE=0
|
||||
if ("`alias env_parallel`" == '' || ! $?PARALLEL_CSH) then
|
||||
# Activate alias
|
||||
alias env_parallel '(setenv PARALLEL_CSH "\!*"; source `which env_parallel.csh`)'
|
||||
set _parallel_eNv_pAtH=`which env_parallel.tcsh`
|
||||
if ( $status == 0 ) then
|
||||
# Activate alias
|
||||
alias env_parallel '(setenv PARALLEL_CSH "\!*"; source '$_parallel_eNv_pAtH')'
|
||||
unset _parallel_eNv_pAtH
|
||||
else
|
||||
echo 'env_parallel: Error: env_parallel.tcsh must be in $PATH ('$PATH')'
|
||||
unset _parallel_eNv_pAtH
|
||||
endif
|
||||
else
|
||||
# Get the --env variables if set
|
||||
# --env _ should be ignored
|
||||
|
|
|
@ -601,7 +601,7 @@ _parset_main() {
|
|||
fi
|
||||
if [ "$_parset_NAME" = "--version" ] ; then
|
||||
# shellcheck disable=SC2006
|
||||
echo "parset 20240622 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "parset 20240722 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "Copyright (C) 2007-2024 Ole Tange, http://ole.tange.dk and Free Software"
|
||||
echo "Foundation, Inc."
|
||||
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
use strict;
|
||||
use Getopt::Long;
|
||||
$Global::progname="niceload";
|
||||
$Global::version = 20240622;
|
||||
$Global::version = 20240722;
|
||||
Getopt::Long::Configure("bundling","require_order");
|
||||
get_options_from_array(\@ARGV) || die_usage();
|
||||
if($opt::version) {
|
||||
|
|
58
src/parallel
58
src/parallel
|
@ -1980,7 +1980,7 @@ sub options_completion_hash() {
|
|||
"gnu[Behave like GNU parallel]" => \$opt::gnu,
|
||||
"link|xapply[Link input sources]" => \$opt::link,
|
||||
"linkinputsource|xapplyinputsource=i" => \@opt::linkinputsource,
|
||||
# Before changing these lines, please read
|
||||
# Before changing these lines, please read
|
||||
# https://www.gnu.org/software/parallel/parallel_design.html#citation-notice
|
||||
# https://git.savannah.gnu.org/cgit/parallel.git/tree/doc/citation-notice-faq.txt
|
||||
# You accept to be put in a public hall-of-shame by removing
|
||||
|
@ -2561,7 +2561,7 @@ sub parse_options(@) {
|
|||
|
||||
# If you want GNU Parallel to be maintained in the future you
|
||||
# should keep this.
|
||||
# *YOU* will be harming free software by removing the notice.
|
||||
# _YOU_ will be harming free software by removing the notice.
|
||||
#
|
||||
# Funding a free software project is hard. GNU Parallel is no
|
||||
# exception. On top of that it seems the less visible a project
|
||||
|
@ -2603,6 +2603,10 @@ sub parse_options(@) {
|
|||
# list. Ideas that will cost work and which have not been tested
|
||||
# are, however, unlikely to be prioritized.
|
||||
#
|
||||
# _YOU_ will be harming free software by removing the notice. You
|
||||
# accept to be added to a public hall of shame by removing the
|
||||
# line. That includes you, George and Andreas.
|
||||
#
|
||||
# Please note that GPL version 3 gives you the right to fork GNU
|
||||
# Parallel under a new name, but it does not give you the right to
|
||||
# distribute modified copies with the citation notice disabled in
|
||||
|
@ -2634,13 +2638,8 @@ sub parse_options(@) {
|
|||
# This is because _YOU_ actively make it harder to justify
|
||||
# spending time developing GNU Parallel by removing it.
|
||||
|
||||
# If you disagree, please read (especially 77-):
|
||||
# If you disagree, please read (especially 77-):
|
||||
# https://www.fordfoundation.org/media/2976/roads-and-bridges-the-unseen-labor-behind-our-digital-infrastructure.pdf
|
||||
|
||||
# *YOU* will be harming free software by removing the notice. You
|
||||
# accept to be added to a public hall of shame by removing the
|
||||
# line. That includes you, George and Andreas.
|
||||
|
||||
parse_halt();
|
||||
|
||||
if($ENV{'PARALLEL_ENV'}) {
|
||||
|
@ -2794,7 +2793,7 @@ sub check_invalid_option_combinations() {
|
|||
|
||||
sub init_globals() {
|
||||
# Defaults:
|
||||
$Global::version = 20240622;
|
||||
$Global::version = 20240722;
|
||||
$Global::progname = 'parallel';
|
||||
$::name = "GNU Parallel";
|
||||
$Global::infinity = 2**31;
|
||||
|
@ -5848,10 +5847,10 @@ sub usage() {
|
|||
"If you use programs that use GNU Parallel to process data for an article in a",
|
||||
"scientific publication, please cite:",
|
||||
"",
|
||||
" Tange, O. (2024, June 22). GNU Parallel 20240622 ('34 counts').",
|
||||
" Zenodo. https://doi.org/10.5281/zenodo.12518196",
|
||||
" Tange, O. (2024, July 22). GNU Parallel 20240722 ('Assange').",
|
||||
" Zenodo. https://doi.org/10.5281/zenodo.12789352",
|
||||
"",
|
||||
# Before changing these lines, please read
|
||||
# Before changing these lines, please read
|
||||
# https://www.gnu.org/software/parallel/parallel_design.html#citation-notice
|
||||
# https://git.savannah.gnu.org/cgit/parallel.git/tree/doc/citation-notice-faq.txt
|
||||
# You accept to be put in a public hall of shame by removing
|
||||
|
@ -5881,14 +5880,13 @@ sub citation_notice() {
|
|||
"If you use programs that use GNU Parallel to process data for an article in a",
|
||||
"scientific publication, please cite:",
|
||||
"",
|
||||
" Tange, O. (2024, June 22). GNU Parallel 20240622 ('34 counts').",
|
||||
" Zenodo. https://doi.org/10.5281/zenodo.12518196",
|
||||
" Tange, O. (2024, July 22). GNU Parallel 20240722 ('Assange').",
|
||||
" Zenodo. https://doi.org/10.5281/zenodo.12789352",
|
||||
"",
|
||||
# Before changing these line, please read
|
||||
# Before changing these line, please read
|
||||
# https://www.gnu.org/software/parallel/parallel_design.html#citation-notice and
|
||||
# https://git.savannah.gnu.org/cgit/parallel.git/tree/doc/citation-notice-faq.txt
|
||||
# You accept to be put in a public hall of shame by
|
||||
# removing these lines
|
||||
# You accept to be put in a public hall of shame by removing these lines
|
||||
"This helps funding further development; AND IT WON'T COST YOU A CENT.",
|
||||
"If you pay 10000 EUR you should feel free to use GNU Parallel without citing.",
|
||||
"",
|
||||
|
@ -6009,20 +6007,20 @@ sub citation() {
|
|||
"If you use programs that use GNU Parallel to process data for an article in a",
|
||||
"scientific publication, please cite:",
|
||||
"",
|
||||
"\@software{tange_2024_12518196,",
|
||||
"\@software{tange_2024_12789352,",
|
||||
" author = {Tange, Ole},",
|
||||
" title = {GNU Parallel 20240622 ('34 counts')},",
|
||||
" month = Jun,",
|
||||
" title = {GNU Parallel 20240722 ('Assange')},",
|
||||
" month = Jul,",
|
||||
" year = 2023,",
|
||||
" note = {{GNU Parallel is a general parallelizer to run",
|
||||
" multiple serial command line programs in parallel",
|
||||
" without changing them.}},",
|
||||
" publisher = {Zenodo},",
|
||||
" doi = {10.5281/zenodo.12518196},",
|
||||
" url = {https://doi.org/10.5281/zenodo.12518196}",
|
||||
" doi = {10.5281/zenodo.12789352},",
|
||||
" url = {https://doi.org/10.5281/zenodo.12789352}",
|
||||
"}",
|
||||
"",
|
||||
"(Feel free to use \\nocite{tange_2024_12518196})",
|
||||
"(Feel free to use \\nocite{tange_2024_12789352})",
|
||||
"",
|
||||
# Before changing these lines, please read
|
||||
# https://www.gnu.org/software/parallel/parallel_design.html#citation-notice and
|
||||
|
@ -6731,10 +6729,10 @@ sub which(@) {
|
|||
if(not $regexp) {
|
||||
# All shells known to mankind
|
||||
#
|
||||
# ash bash csh dash fdsh fish fizsh ksh ksh93 mksh pdksh
|
||||
# ash bash csh dash fdsh fish fizsh ion ksh ksh93 mksh pdksh
|
||||
# posh rbash rc rush rzsh sash sh static-sh tcsh yash zsh
|
||||
|
||||
my @shells = (qw(ash bash bsd-csh csh dash fdsh fish fizsh ksh
|
||||
my @shells = (qw(ash bash bsd-csh csh dash fdsh fish fizsh ion ksh
|
||||
ksh93 lksh mksh pdksh posh rbash rc rush rzsh sash sh
|
||||
static-sh tcsh yash zsh -sh -csh -bash),
|
||||
'-sh (sh)' # sh on FreeBSD
|
||||
|
@ -6744,7 +6742,7 @@ sub which(@) {
|
|||
# /bin/sh /sbin/sh /opt/csw/sh
|
||||
# But not: foo.sh sshd crash flush pdflush scosh fsflush ssh
|
||||
$shell = "(?:".join("|",map { "\Q$_\E" } @shells).")";
|
||||
$regexp = '^((\[)(-?)('. $shell. ')(\])|(|\S+/|busybox )'.
|
||||
$regexp = '^((\[)(-?)('. $shell. ')(\])|(|\S+/|\S*busybox |\S*rosetta )'.
|
||||
'(-?)('. $shell. '))( *$| [^(])';
|
||||
%fakename = (
|
||||
# sh disguises itself as -sh (sh) on FreeBSD
|
||||
|
@ -6776,6 +6774,11 @@ sub which(@) {
|
|||
if(open(my $fd, "<", "/proc/$testpid/cmdline")) {
|
||||
local $/="\0";
|
||||
chomp($shellline = <$fd>);
|
||||
if($shellline =~ /busybox$|rosetta$/) {
|
||||
# Possibly: busybox \0 sh or .../rosetta \0 /bin/bash
|
||||
# Skip busybox/rosetta
|
||||
chomp($shellline = <$fd>);
|
||||
}
|
||||
if($shellline =~ /$regexp/o) {
|
||||
my $shellname = $4 || $8;
|
||||
my $dash = $3 || $7;
|
||||
|
@ -8522,7 +8525,8 @@ sub user_requested_processes($) {
|
|||
my $opt_P = shift;
|
||||
my $processes;
|
||||
if(defined $opt_P) {
|
||||
if (-f $opt_P) {
|
||||
if (-f $opt_P and not $opt_P =~ /^[-+]?\d+%?$/) {
|
||||
# This is a file. Ignore files called +10% 4 -3
|
||||
$Global::max_procs_file = $opt_P;
|
||||
my $opt_P_file = ::slurp_or_exit($Global::max_procs_file);
|
||||
if($opt_P_file !~ /\S/) {
|
||||
|
|
|
@ -1775,7 +1775,7 @@ If in doubt use B<-X> as that will most likely do what is needed.
|
|||
See also: B<-X> B<--xargs>
|
||||
|
||||
|
||||
=item B<--memfree> I<size> (alpha testing)
|
||||
=item B<--memfree> I<size>
|
||||
|
||||
Minimum memory free when starting another job.
|
||||
|
||||
|
@ -1879,7 +1879,7 @@ is somewhat slower than B<--block>.
|
|||
See also: UNIT PREFIX B<--pipe> B<--block> B<-m> B<-X> B<--max-args>
|
||||
|
||||
|
||||
=item B<--nonall> (alpha testing)
|
||||
=item B<--nonall>
|
||||
|
||||
B<--onall> with no arguments.
|
||||
|
||||
|
@ -1894,7 +1894,7 @@ servers.
|
|||
See also: B<--onall> B<--sshlogin>
|
||||
|
||||
|
||||
=item B<--onall> (alpha testing)
|
||||
=item B<--onall>
|
||||
|
||||
Run all the jobs on all computers given with B<--sshlogin>.
|
||||
|
||||
|
@ -3896,10 +3896,14 @@ as 1M-12*2.024*2k.
|
|||
GNU B<parallel> is very liberal in quoting. You only need to quote
|
||||
characters that have special meaning in shell:
|
||||
|
||||
=for pod2rst next-code-block: text
|
||||
|
||||
( ) $ ` ' " < > ; | \
|
||||
|
||||
and depending on context these needs to be quoted, too:
|
||||
|
||||
=for pod2rst next-code-block: text
|
||||
|
||||
~ & ! ? space * { #
|
||||
|
||||
Therefore most people will never need more quoting than putting '\'
|
||||
|
@ -4410,14 +4414,20 @@ you, file a bug-report.
|
|||
|
||||
If you get:
|
||||
|
||||
=for pod2rst next-code-block: text
|
||||
|
||||
Can't exec "command": No such file or directory
|
||||
|
||||
or:
|
||||
|
||||
=for pod2rst next-code-block: text
|
||||
|
||||
open3: exec of by command failed
|
||||
|
||||
or:
|
||||
|
||||
=for pod2rst next-code-block: text
|
||||
|
||||
/bin/bash: command: command not found
|
||||
|
||||
it may be because I<command> is not known, but it could also be
|
||||
|
|
|
@ -118,6 +118,10 @@ The following features are in some of the comparable tools:
|
|||
|
||||
=item E7. Only spawn new jobs if load is less than a limit
|
||||
|
||||
=item E8. Full command has non-zero exit value if one job has non-zero exit value
|
||||
|
||||
=item E9. Jobs can be started without reading all input first
|
||||
|
||||
=back
|
||||
|
||||
|
||||
|
@ -183,7 +187,7 @@ parallel:
|
|||
|
||||
=item O1 O2 O3 O4 O5 O6 O7 O8 O9 O10
|
||||
|
||||
=item E1 E2 E3 E4 E5 E6 E7
|
||||
=item E1 E2 E3 E4 E5 E6 E7 E8 E9
|
||||
|
||||
=item R1 R2 R3 R4 R5 R6 R7 R8 R9
|
||||
|
||||
|
@ -204,7 +208,7 @@ Summary (see legend above):
|
|||
|
||||
=item - O2 O3 - O5 O6
|
||||
|
||||
=item E1 - - - - - -
|
||||
=item E1 - - - - - - E8 E9
|
||||
|
||||
=item - - - - - x - - -
|
||||
|
||||
|
@ -541,7 +545,7 @@ using GNU B<parallel>:
|
|||
'pnmscale 0.5 | pnmtojpeg | sem --id diskio cat > th_{}'
|
||||
|
||||
https://www.gnu.org/software/pexec/
|
||||
(Last checked: 2010-12)
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN xjobs AND GNU Parallel
|
||||
|
@ -614,7 +618,7 @@ using GNU B<parallel>:
|
|||
1$ parallel mogrify -flip ::: *.jpg
|
||||
|
||||
https://github.com/exzombie/prll
|
||||
(Last checked: 2019-01)
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN dxargs AND GNU Parallel
|
||||
|
@ -645,7 +649,7 @@ berlios.de/usage.html ported to GNU B<parallel>:
|
|||
find dir -execdir sem cmd {} \;
|
||||
|
||||
https://github.com/cklin/mdm
|
||||
(Last checked: 2019-01)
|
||||
(Last checked: 2014-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN xapply AND GNU Parallel
|
||||
|
@ -708,8 +712,8 @@ using GNU B<parallel>:
|
|||
|
||||
11$ parallel '[ -f {} ] && echo {}' < List | ...
|
||||
|
||||
https://www.databits.net/~ksb/msrc/local/bin/xapply/xapply.html (Last
|
||||
checked: 2010-12)
|
||||
https://www.databits.net/~ksb/msrc/local/bin/xapply/xapply.html
|
||||
(Last checked: 2010-12)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN AIX apply AND GNU Parallel
|
||||
|
@ -753,55 +757,358 @@ ssw_aix_71/com.ibm.aix.cmds1/apply.htm
|
|||
|
||||
=head2 DIFFERENCES BETWEEN paexec AND GNU Parallel
|
||||
|
||||
Summary (see legend above):
|
||||
|
||||
=over
|
||||
|
||||
=item I1 - - - - - I7
|
||||
|
||||
=item - - M3 - - -
|
||||
|
||||
=item (O1) O2 O3 (O4) (O5) O6 - O8 x -
|
||||
|
||||
=item E1 - - - (E5) - - -
|
||||
|
||||
=item R1 - - - x R6 - R8 R9
|
||||
|
||||
=item - -
|
||||
|
||||
=back
|
||||
|
||||
B<paexec> can run jobs in parallel on both the local and remote computers.
|
||||
|
||||
B<paexec> requires commands to print a blank line as the last
|
||||
output. This means you will have to write a wrapper for most programs.
|
||||
|
||||
B<paexec> has a job dependency facility so a job can depend on another
|
||||
job to be executed successfully. Sort of a poor-man's B<make>.
|
||||
job to be executed successfully. Sort of a poor-man's B<make>. This
|
||||
can partly be emulated in GNU B<parallel> with B<tsort>.
|
||||
|
||||
=head3 EXAMPLES FROM paexec's EXAMPLE CATALOG
|
||||
B<paexec> fails if output of a single line is > 2 GB. Output of a 2 GB
|
||||
line requires 6 GB RAM. Lines of standard output is interleaved (but
|
||||
there is no half line mixing), and output of standard error
|
||||
mixes. Combined with B<paexec_reorder> output order can be the same as
|
||||
input order. In certain situations B<paexec> will eat the last newline
|
||||
of standard output.
|
||||
|
||||
Here are the examples from B<paexec>'s example catalog with the equivalent
|
||||
There seems to be no way to make 4 jobs run on a remote server with 4
|
||||
cores and 16 jobs on a remote server with 16 cores.
|
||||
|
||||
|
||||
=head3 EXAMPLES FROM man paexec
|
||||
|
||||
Here are the examples from B<man paexec> with the equivalent using GNU
|
||||
B<parallel>.
|
||||
|
||||
1$ paexec -t '/usr/bin/ssh -x' -n 'host1 host2 host3' \
|
||||
-le -g -c calculate-me < tasks.txt |
|
||||
paexec_reorder -Mf -Sl
|
||||
|
||||
# GNU Parallel cannot stop processing jobs that depend on another.
|
||||
# It can either try all:
|
||||
1$ tsort tasks.txt |
|
||||
parallel --ssh '/usr/bin/ssh -x' -S "host1,host2,host3" \
|
||||
--tagstring {#} --pipe -N1 --log my.log calculate-me
|
||||
|
||||
# Or it can stop at the first failing:
|
||||
1$ tsort tasks.txt |
|
||||
parallel --ssh '/usr/bin/ssh -x' -S "host1,host2,host3" \
|
||||
--tagstring {#} --halt now,fail=1 --pipe -N1 --log my.log calculate-me
|
||||
|
||||
# To retry the the failed and missing tasks:
|
||||
1$ tsort tasks.txt |
|
||||
parallel --ssh '/usr/bin/ssh -x' -S "host1,host2,host3" \
|
||||
--tagstring {#} --halt now,fail=1 --pipe -N1 --joblog my.log \
|
||||
--resume-failed calculate-me
|
||||
|
||||
2$ ls -1 *.wav | paexec -x -n +4 -c 'oggenc -Q'
|
||||
|
||||
2$ ls -1 *.wav | parallel -j4 oggenc -Q
|
||||
|
||||
3$ ls -1 *.wav | paexec -xCil -n+4 flac -f --silent
|
||||
|
||||
3$ ls -1 *.wav | parallel --tagstring {#} -j4 'echo {}; flac -f --silent {}'
|
||||
|
||||
4$ { uname -s; uname -r; uname -m; } |
|
||||
paexec -x -lp -n+2 -c banner |
|
||||
paexec_reorder -l
|
||||
|
||||
4$ { uname -s; uname -r; uname -m; } |
|
||||
parallel --tagstring '{#}' -k \
|
||||
'banner {} | perl -pe "s/^/getppid().\" \"/e"'
|
||||
|
||||
5$ find . -name '*.dat' -print0 |
|
||||
paexec -0 -n+10 -C -J// scp // remoteserver:/remote/path
|
||||
|
||||
5$ find . -name '*.dat' -print0 |
|
||||
parallel -0 -j10 -I// scp // remoteserver:/remote/path
|
||||
|
||||
6$ ls -1 *.txt | paexec -n+10 -J%% -c 'awk "BEGIN {print toupper(\"%%\")}"'
|
||||
|
||||
6$ ls -1 *.txt | parallel -j10 -I%% 'awk "BEGIN {print toupper(\"%%\")}"'
|
||||
|
||||
=head3 EXAMPLES FROM presentation/paexec.tex
|
||||
|
||||
7$ ls -1 *.wav | \
|
||||
paexec -x -c 'flac -s' -n +4 > /dev/null
|
||||
|
||||
7$ ls -1 *.wav | \
|
||||
parallel -j4 flac -s > /dev/null
|
||||
|
||||
8$ cat ~/bin/toupper
|
||||
#!/usr/bin/awk -f
|
||||
{
|
||||
print " ", toupper($0)
|
||||
print "" # empty line -- end-of-task marker!
|
||||
fflush() # We must flush stdout!
|
||||
}
|
||||
|
||||
cat tasks
|
||||
apple
|
||||
bananas
|
||||
orange
|
||||
|
||||
paexec -t ssh -c ~/bin/toupper -n 'server1 server2' < tasks
|
||||
|
||||
8$ parallel --pipe -n1 -S server1,server2 ~/bin/toupper < tasks
|
||||
|
||||
9$ paexec -lr -t ssh -c ~/bin/toupper -n 'server1 server2' < tasks
|
||||
|
||||
9$ # GNU Parallel has no easy way to prepend the server
|
||||
parallel --tagstring {#} --pipe -n1 -S server1,server2 ~/bin/toupper < tasks
|
||||
cat tasks | parallel --tagstring {#} --pipe -n1 -S server1,server2 --plus \
|
||||
~/bin/toupper '| perl -pe "s/^/{sshlogin}/"' < tasks
|
||||
|
||||
10$ paexec -n +4 -c ~/bin/toupper < tasks
|
||||
|
||||
10$ parallel -j4 --pipe -n1 ~/bin/toupper < tasks
|
||||
|
||||
11$ paexec -x -t ssh -n 'server1 server2' \
|
||||
-c "awk 'BEGIN {print toupper(ARGV[1])}' " < tasks
|
||||
|
||||
11$ parallel -S 'server1,server2' \
|
||||
"awk 'BEGIN {print toupper(ARGV[1])}'" < tasks
|
||||
|
||||
12$ paexec -x -C -t ssh -n 'server1 server2' \
|
||||
awk 'BEGIN {print toupper(ARGV[1])}' < tasks
|
||||
|
||||
12$ parallel -S 'server1,server2' -q \
|
||||
awk 'BEGIN {print toupper(ARGV[1])}' < tasks
|
||||
|
||||
13$ paexec -Z240 -x -t ssh -n 'server1 badhostname server2' \
|
||||
-c "awk 'BEGIN {print toupper(ARGV[1])}' " < tasks
|
||||
|
||||
13$ parallel --filter-hosts -S 'server1,badhostname,server2' \
|
||||
"awk 'BEGIN {print toupper(ARGV[1])}' " < tasks
|
||||
|
||||
14$ cat ~/bin/pbanner
|
||||
#!/usr/bin/env sh
|
||||
while read task; do
|
||||
banner -f M "$task" | pv -qL 300
|
||||
echo "$PAEXEC_EOT" # end-of-task marker
|
||||
done
|
||||
|
||||
cat tasks
|
||||
pae
|
||||
xec
|
||||
|
||||
paexec -l -mt='SE@X-L0S0!&' -c ~/bin/pbanner -n +2 < tasks |
|
||||
paexec_reorder -mt='SE@X-L0S0!&'
|
||||
|
||||
14$ paexec -y -lc ~/bin/pbanner -n+2 < tasks | paexec_reorder -y
|
||||
|
||||
14$ paexec -l -x -c banner -n+2 < tasks
|
||||
|
||||
14$ parallel --pipe -n1 -j2 ~/bin/pbanner < tasks
|
||||
|
||||
16$ cat ~/tmp/packages_to_build
|
||||
audio/cd-discid audio/abcde
|
||||
textproc/gsed audio/abcde
|
||||
audio/cdparanoia audio/abcde
|
||||
audio/id3v2 audio/abcde
|
||||
audio/id3 audio/abcde
|
||||
misc/mkcue audio/abcde
|
||||
shells/bash audio/abcde
|
||||
devel/libtool-base audio/cdparanoia
|
||||
devel/gmake audio/cdparanoia
|
||||
devel/libtool-base audio/id3lib
|
||||
devel/gmake audio/id3v2
|
||||
audio/id3lib audio/id3v2
|
||||
devel/m4 devel/bison
|
||||
lang/f2c devel/libtool-base
|
||||
devel/gmake misc/mkcue
|
||||
devel/bison shells/bash
|
||||
|
||||
cat ~/bin/pkg_builder
|
||||
#!/usr/bin/awk -f
|
||||
|
||||
{
|
||||
print "build " $0
|
||||
print "success" # build succeeded! (paexec -ms=)
|
||||
print "" # end-of-task marker
|
||||
fflush() # we must flush stdout
|
||||
}
|
||||
|
||||
paexec -g -l -c ~/bin/pkg_builder -n 'server2 server1' \
|
||||
-t ssh < ~/tmp/packages_to_build | paexec_reorder
|
||||
|
||||
# GNU Parallel cannot postpone jobs that depend on another.
|
||||
# In some cases this will work
|
||||
16$ tsort ~/tmp/packages_to_build | parallel -S server2,server1 \
|
||||
--pipe -n1 ~/bin/pkg_builder
|
||||
|
||||
17$ cat ~/bin/pkg_builder
|
||||
#!/usr/bin/awk -f
|
||||
|
||||
{
|
||||
print "build " $0
|
||||
if ($0 == "devel/gmake")
|
||||
print "failure" # Oh no...
|
||||
exit 255 # Exit value needed for GNU Parallel
|
||||
else
|
||||
print "success" # build succeeded!
|
||||
|
||||
print "" # end-of-task marker
|
||||
fflush() # we must flush stdout
|
||||
}
|
||||
|
||||
paexec -gl -c ~/bin/pkg_builder -n 'server2 server1' \
|
||||
-t ssh < ~/tmp/packages_to_build | paexec_reorder
|
||||
|
||||
# GNU Parallel cannot refrain from starting jobs, that depend on others
|
||||
# In some cases this will work
|
||||
17$ tsort ~/tmp/packages_to_build | parallel -S server2,server1 \
|
||||
--halt now,fail=1 --pipe -n1 ~/bin/pkg_builder
|
||||
|
||||
18$ cat ~/bin/pkg_builder
|
||||
#!/usr/bin/awk -f
|
||||
|
||||
{
|
||||
"hostname -s" | getline hostname
|
||||
print "build " $0 " on " hostname
|
||||
|
||||
if (hostname == "server1" && $0 == "textproc/gsed")
|
||||
exit 139
|
||||
# Damn it, I'm dying...
|
||||
# Exit value is needed by GNU Parallel
|
||||
else
|
||||
print "success" # Yes! :-)
|
||||
|
||||
print "" # end-of-task marker
|
||||
fflush() # we must flush stdout
|
||||
}
|
||||
|
||||
paexec -gl -Z300 -t ssh -c ~/bin/pkg_builder \
|
||||
-n 'server2 server1' < ~/tmp/packages_to_build |
|
||||
paexec_reorder > result
|
||||
|
||||
# GNU Parallel retries a job on another server, if --retries > 1
|
||||
17$ tsort ~/tmp/packages_to_build | parallel -S server2,server1 \
|
||||
--halt now,fail=1 --retries 2 --pipe -n1 ~/bin/pkg_builder
|
||||
|
||||
18$ ls -1 *.wav | paexec -x -c 'flac -s' -n+3 >/dev/null
|
||||
|
||||
18$ ls -1 *.wav | parallel -j3 flac -s >/dev/null
|
||||
|
||||
19$ ls -1 *.wav | paexec -ixC -n+3 oggenc -Q | grep .
|
||||
|
||||
19$ ls -1 *.wav | parallel -j3 'echo {}; oggenc -Q {}' | grep .
|
||||
|
||||
20$ cat calc
|
||||
#!/bin/sh
|
||||
# $1 -- task given on input
|
||||
if test $1 = huge; then
|
||||
sleep 6
|
||||
else
|
||||
sleep 1
|
||||
fi
|
||||
echo "task $1 done"
|
||||
|
||||
printf 'small1\nsmall2\nsmall3\nsmall4\nsmall5\nhuge\n' |
|
||||
time -p paexec -c ~/bin/calc -n +2 -xg | grep -v success
|
||||
|
||||
20$ printf 'small1\nsmall2\nsmall3\nsmall4\nsmall5\nhuge\n' |
|
||||
time -p parallel -j2 ~/bin/calc | grep -v success
|
||||
|
||||
21$ printf 'small1\nsmall2\nsmall3\nsmall4\nweight: huge 6\n' |
|
||||
time -p paexec -c ~/bin/calc -n +2 -x -W1 | grep -v success
|
||||
|
||||
21$ # GNU Parallel does not support weighted jobs.
|
||||
# It can be simulated by sorting:
|
||||
printf 'small1\nsmall2\nsmall3\nsmall4\nweight: huge 6\n' |
|
||||
perl -pe 's/^weight: (.*) (\d+)/$2 $1/ or s/^/1 /' |
|
||||
sort -nr | time parallel ~/bin/calc '{=s/^\d* //=}' |
|
||||
grep -v success
|
||||
|
||||
=head3 EXAMPLES FROM paexec's example dir
|
||||
|
||||
Here are the examples from B<paexec>'s example dir with the equivalent
|
||||
using GNU B<parallel>:
|
||||
|
||||
=head4 1_div_X_run
|
||||
=head4 all_substr
|
||||
|
||||
1$ ../../paexec -s -l -c "`pwd`/1_div_X_cmd" -n +1 <<EOF [...]
|
||||
$ paexec -lpe -c "`pwd`/cmd" -n +3 <<EOF
|
||||
|
||||
1$ parallel echo {} '|' `pwd`/1_div_X_cmd <<EOF [...]
|
||||
$ parallel -j3 --pipe -n1 --tagstring {#} \
|
||||
'./cmd | perl -pe "s/^/getppid().\" \"/e"' <<EOF
|
||||
|
||||
=head4 all_substr_run
|
||||
=head4 cc_wrapper
|
||||
|
||||
2$ ../../paexec -lp -c "`pwd`/all_substr_cmd" -n +3 <<EOF [...]
|
||||
|
||||
2$ parallel echo {} '|' `pwd`/all_substr_cmd <<EOF [...]
|
||||
|
||||
=head4 cc_wrapper_run
|
||||
|
||||
3$ ../../paexec -c "env CC=gcc CFLAGS=-O2 `pwd`/cc_wrapper_cmd" \
|
||||
$ paexec -c "env CC=gcc CFLAGS=-O2 `pwd`/cmd" \
|
||||
-n 'host1 host2' \
|
||||
-t '/usr/bin/ssh -x' <<EOF [...]
|
||||
-t '/usr/bin/ssh -x' <<EOF
|
||||
|
||||
3$ parallel echo {} '|' "env CC=gcc CFLAGS=-O2 `pwd`/cc_wrapper_cmd" \
|
||||
-S host1,host2 <<EOF [...]
|
||||
$ parallel --pipe -n1 -S 'host1,host2' \
|
||||
"env CC=gcc CFLAGS=-O2 `pwd`/cmd" <<EOF
|
||||
|
||||
# This is not exactly the same, but avoids the wrapper
|
||||
parallel gcc -O2 -c -o {.}.o {} \
|
||||
-S host1,host2 <<EOF [...]
|
||||
# This is not exactly the same, but avoids the wrapper
|
||||
$ parallel -S host1,host2 gcc -O2 -c -o {.}.o {} <<EOF
|
||||
|
||||
=head4 toupper_run
|
||||
=head4 cc_wrapper2
|
||||
|
||||
4$ ../../paexec -lp -c "`pwd`/toupper_cmd" -n +10 <<EOF [...]
|
||||
$ ls -1 $PWD/*.c | paexec -c "env $CC $CFLAGS -c " -n +4 -x
|
||||
|
||||
4$ parallel echo {} '|' ./toupper_cmd <<EOF [...]
|
||||
$ ls -1 $PWD/*.c | parallel -j4 "env $CC $CFLAGS -c"
|
||||
|
||||
# Without the wrapper:
|
||||
parallel echo {} '| awk {print\ toupper\(\$0\)}' <<EOF [...]
|
||||
=head4 dirtest
|
||||
|
||||
$ paexec -gx -l -c 'test -d' -md=';' -n +3 < tasks
|
||||
|
||||
# GNU Parallel cannot refrain from starting jobs, that depend on others
|
||||
$ parallel -j3 --tag test -d '{= s/.*;// =}; echo $?' < tasks
|
||||
|
||||
=head4 divide
|
||||
|
||||
$ paexec -s -l -c cmd_divide -n +3 <<EOF
|
||||
|
||||
# GNU Parallel cannot refrain from starting jobs, that depend on others
|
||||
$ parallel -j3 --pipe -n1 cmd_divide <<EOF
|
||||
|
||||
=head4 make_package
|
||||
|
||||
1$ paexec -g -le -c "`pwd`/cmd" -n +3 < tasks | paexec_reorder -g -Ms
|
||||
|
||||
# GNU Parallel cannot refrain from starting jobs, that depend on others
|
||||
1$ cat < tasks | parallel --pipe -n1 -j3 "`pwd`/cmd"
|
||||
|
||||
2$ paexec -g -le -c "`pwd`/cmd" -n +3 < tasks_cycle
|
||||
|
||||
2$ tsort < tasks_cycle | parallel --pipe -n1 -j3 "`pwd`/cmd"
|
||||
|
||||
=head4 toupper
|
||||
|
||||
$ input | paexec -c "`pwd`/cmd" -n +2 | cut -b 2-
|
||||
|
||||
$ input | parallel --pipe -n1 -j2 "`pwd`/cmd" | cut -b 2-
|
||||
|
||||
$ # Without the wrapper:
|
||||
input | parallel --pipe -n1 -j2 'awk {print\ toupper\(\$0\)}'
|
||||
|
||||
=head4 wav2flac
|
||||
|
||||
$ ls -1 "$dir"/*.wav | paexec -x -c 'flac --silent' -n +"$num"
|
||||
|
||||
$ ls -1 "$dir"/*.wav | parallel -j $num flac --silent
|
||||
|
||||
https://github.com/cheusov/paexec
|
||||
(Last checked: 2010-12)
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN map(sitaramc) AND GNU Parallel
|
||||
|
@ -989,7 +1296,7 @@ and that it is run under a shell that supports '**' globbing (such as B<zsh>):
|
|||
4$ parallel lame -V 2 FULLPATH DIRNAME/BASENAME.mp3 ::: ~/Music/*.wav
|
||||
|
||||
https://github.com/danielgtaylor/ladon
|
||||
(Last checked: 2019-01)
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN jobflow AND GNU Parallel
|
||||
|
@ -1067,7 +1374,7 @@ jobs. This can be emulated by GNU B<parallel> using B<bash>'s B<ulimit>:
|
|||
5$ seq 100 | parallel echo '{= $_>10 and $_<=20 or skip() =}'
|
||||
|
||||
https://github.com/rofl0r/jobflow
|
||||
(Last checked: 2022-05)
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN gargs AND GNU Parallel
|
||||
|
@ -1214,6 +1521,8 @@ B<rush> has some string manipulations that can be emulated by putting
|
|||
this into ~/.parallel/config (/ is used instead of %, and % is used
|
||||
instead of ^ as that is closer to bash's ${var%postfix}):
|
||||
|
||||
=for pod2rst next-code-block: text
|
||||
|
||||
--rpl '{:} s:(\.[^/]+)*$::'
|
||||
--rpl '{:%([^}]+?)} s:$$1(\.[^/]+)*$::'
|
||||
--rpl '{/:%([^}]*?)} s:.*/(.*)$$1(\.[^/]+)*$:$1:'
|
||||
|
@ -1368,6 +1677,8 @@ If you I<really> want the B<for>-loop:
|
|||
|
||||
Contrary to B<rush> this also works if the value is complex like:
|
||||
|
||||
=for pod2rst next-code-block: text
|
||||
|
||||
My brother's 12" records
|
||||
|
||||
|
||||
|
@ -1637,10 +1948,10 @@ computer has 8 cores).
|
|||
|
||||
GNU B<parallel> can be used as a poor-man's version of ClusterSSH:
|
||||
|
||||
B<parallel --nonall -S server-a,server-b do_stuff foo bar>
|
||||
parallel --nonall -S server-a,server-b do_stuff foo bar
|
||||
|
||||
https://github.com/duncs/clusterssh
|
||||
(Last checked: 2010-12)
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN coshell AND GNU Parallel
|
||||
|
@ -1689,7 +2000,7 @@ It can be emulated with GNU B<parallel> using this Bash function:
|
|||
}
|
||||
|
||||
https://github.com/tfogo/spread
|
||||
(Last checked: 2024-04)
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN pyargs AND GNU Parallel
|
||||
|
@ -1733,7 +2044,7 @@ and fails on B<pyargs traceroute gnu.org fsf.org>.
|
|||
parallel seq ::: 1 2 3 4 5 6
|
||||
|
||||
https://github.com/robertblackwell/pyargs
|
||||
(Last checked: 2019-01)
|
||||
(Last checked: 2024-01)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN concurrently AND GNU Parallel
|
||||
|
@ -1858,7 +2169,7 @@ emulated with GNU B<parallel>:
|
|||
$ loopy touch '{= $_=seq()*5 =}'.txt
|
||||
|
||||
$ loop --until-contains 200 -- \
|
||||
./get_response_code.sh --site mysite.biz`
|
||||
./get_response_code.sh --site mysite.biz
|
||||
$ loopy --halt now,success=1 \
|
||||
'./get_response_code.sh --site mysite.biz | match 200'
|
||||
|
||||
|
@ -2018,7 +2329,7 @@ template to generate the jobs, but requires jobs to be in a
|
|||
file. Output from the jobs mix.
|
||||
|
||||
https://github.com/john01dav/spp
|
||||
(Last checked: 2019-01)
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN paral AND GNU Parallel
|
||||
|
@ -2088,7 +2399,7 @@ the GNU B<parallel> command):
|
|||
echo g && sleep 0.5 && echo h"
|
||||
|
||||
https://github.com/amattn/paral
|
||||
(Last checked: 2019-01)
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN concurr AND GNU Parallel
|
||||
|
@ -2116,7 +2427,7 @@ B<concurr> deals badly empty input files and with output larger than
|
|||
64 KB.
|
||||
|
||||
https://github.com/mmstick/concurr
|
||||
(Last checked: 2019-01)
|
||||
(Last checked: 2024-01)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN lesser-parallel AND GNU Parallel
|
||||
|
@ -2130,7 +2441,7 @@ hardly any options, whereas B<parallel --embed> gives you the full
|
|||
GNU B<parallel> experience.
|
||||
|
||||
https://github.com/kou1okada/lesser-parallel
|
||||
(Last checked: 2019-01)
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN npm-parallel AND GNU Parallel
|
||||
|
@ -2141,7 +2452,7 @@ There are no examples and very little documentation, so it is hard to
|
|||
compare to GNU B<parallel>.
|
||||
|
||||
https://github.com/spion/npm-parallel
|
||||
(Last checked: 2019-01)
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN machma AND GNU Parallel
|
||||
|
@ -2355,7 +2666,7 @@ https://github.com/codingo/Interlace
|
|||
I have been unable to get the code to run at all. It seems unfinished.
|
||||
|
||||
https://github.com/otonvm/Parallel
|
||||
(Last checked: 2019-02)
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN k-bx par AND GNU Parallel
|
||||
|
@ -2430,7 +2741,7 @@ will cause the system to freeze if there are so many jobs that there
|
|||
is not enough memory to run them all at the same time.
|
||||
|
||||
https://github.com/royriojas/shell-executor
|
||||
(Last checked: 2019-02)
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN non-GNU par AND GNU Parallel
|
||||
|
@ -2551,7 +2862,7 @@ corresponding GNU B<sem> and GNU B<parallel> commands:
|
|||
wait
|
||||
|
||||
https://github.com/akramer/lateral
|
||||
(Last checked: 2019-03)
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN with-this AND GNU Parallel
|
||||
|
@ -2585,7 +2896,7 @@ B<with-this> gives some additional information, so the output has to
|
|||
be cleaned before piping it to the next command.
|
||||
|
||||
https://github.com/amritb/with-this.git
|
||||
(Last checked: 2019-03)
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN Tollef's parallel (moreutils) AND GNU Parallel
|
||||
|
@ -2732,7 +3043,7 @@ lost. B<threader> buffers in RAM, so output bigger than the machine's
|
|||
virtual memory will cause the machine to crash.
|
||||
|
||||
https://github.com/voodooEntity/threader
|
||||
(Last checked: 2020-04)
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN runp AND GNU Parallel
|
||||
|
@ -3016,7 +3327,7 @@ composed commands.
|
|||
|
||||
|
||||
https://github.com/ctbur/async/
|
||||
(Last checked: 2023-01)
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN pardi AND GNU Parallel
|
||||
|
@ -3117,7 +3428,7 @@ You cannot quote space in the command, so you cannot run composed
|
|||
commands like B<sh -c "echo a; echo b">.
|
||||
|
||||
https://gitlab.com/netikras/bthread
|
||||
(Last checked: 2021-01)
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN simple_gpu_scheduler AND GNU Parallel
|
||||
|
@ -3183,7 +3494,7 @@ Summary (see legend above):
|
|||
seq 3 | parallel echo true >> gpu.queue
|
||||
|
||||
https://github.com/ExpectationMax/simple_gpu_scheduler
|
||||
(Last checked: 2021-01)
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN parasweep AND GNU Parallel
|
||||
|
@ -3246,7 +3557,7 @@ https://github.com/eviatarbach/parasweep
|
|||
(Last checked: 2021-01)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN parallel-bash AND GNU Parallel
|
||||
=head2 DIFFERENCES BETWEEN parallel-bash(2021) AND GNU Parallel
|
||||
|
||||
Summary (see legend above):
|
||||
|
||||
|
@ -3309,8 +3620,99 @@ running jobs.
|
|||
|
||||
4$ something | parallel -j 5 echo {} {}
|
||||
|
||||
https://reposhub.com/python/command-line-tools/Akianonymus-parallel-bash.html
|
||||
(Last checked: 2021-06)
|
||||
https://github.com/Akianonymus/parallel-bash/
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN parallel-bash(2024) AND GNU Parallel
|
||||
|
||||
Summary (see legend above):
|
||||
|
||||
=over
|
||||
|
||||
=item I1 I2 - - - - -
|
||||
|
||||
=item - - M3 - - M6
|
||||
|
||||
=item - O2 O3 - O5 O6 - O8 x O10
|
||||
|
||||
=item E1 - - - - - -
|
||||
|
||||
=item - - - - - - - - -
|
||||
|
||||
=item - -
|
||||
|
||||
=back
|
||||
|
||||
B<parallel-bash> is written in pure bash. It is really fast (overhead
|
||||
of ~0.05 ms/job compared to GNU B<parallel>'s 3-10 ms/job). So if your
|
||||
jobs are extremely short lived, and you can live with the quite
|
||||
limited command, this may be useful.
|
||||
|
||||
It seems the number of jobs must be divisible by B<-p>, so it
|
||||
sometimes does not run the jobs:
|
||||
|
||||
# Does nothing
|
||||
$ seq 3 | parallel-bash -p 4 bash -c 'touch myfile-{}'
|
||||
|
||||
This should create myfile-1..3, but creates nothing.
|
||||
|
||||
It splits the input into queues. Each queue is of length B<-p>. So
|
||||
this will make 250 queues and run all 250 processes in parallel:
|
||||
|
||||
$ seq 1000 | parallel-bash -p 4 bash -c 'sleep {}'
|
||||
|
||||
This is quite different from B<parallel-bash>(2021) where B<-p> is the
|
||||
number of workers - similar to B<--jobs> in GNU B<parallel>.
|
||||
|
||||
In other words: B<parallel-bash> does I<not> quarantee that only 4 jobs
|
||||
will be run in parallel. This can overload your machine:
|
||||
|
||||
# Warning: This will start 25000 processes - not just 4
|
||||
$ seq 100000 | parallel-bash -p 4 sleep {}
|
||||
|
||||
If you are unlucky all long jobs may end up in the same queue:
|
||||
|
||||
$ printf "%b\n" 1 1 1 1 5 5 5 5 1 1 1 1 |
|
||||
time parallel -P4 sleep {}
|
||||
(7 seconds)
|
||||
$ printf "%b\n" 1 1 1 1 5 5 5 5 1 1 1 1 |
|
||||
time ./parallel-bash.bash -p 4 -c sleep {}
|
||||
(20 seconds)
|
||||
|
||||
Ctrl-C kills the jobs (as expected). Ctrl-Z does not suspend running jobs.
|
||||
|
||||
|
||||
=head3 EXAMPLES FROM parallel-bash
|
||||
|
||||
1$ main() { echo "${1}" ;}
|
||||
export -f main
|
||||
|
||||
1$ printf "%b\n" {1..1000} | ./parallel-bash -p 10 main {}
|
||||
|
||||
1$ printf "%b\n" {1..1000} | parallel -j 100 main {}
|
||||
|
||||
2$ # Number of inputs must be divisible by 5
|
||||
some_input | parallel-bash -p 5 echo
|
||||
|
||||
2$ some_input | parallel -j 5 echo
|
||||
|
||||
3$ # Number of inputs must be divisible by 5
|
||||
parallel-bash -p 5 echo < some_file
|
||||
|
||||
3$ parallel -j 5 echo < some_file
|
||||
|
||||
4$ # Number of lines in 'some string' must be divisible by 5
|
||||
parallel-bash -p 5 echo <<< 'some string'
|
||||
|
||||
4$ parallel -j 5 -c echo <<< 'some string'
|
||||
|
||||
5$ something | parallel-bash -p 5 echo {}
|
||||
|
||||
5$ something | parallel -j 5 echo {}
|
||||
|
||||
https://github.com/Akianonymus/parallel-bash/
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN bash-concurrent AND GNU Parallel
|
||||
|
@ -3332,7 +3734,7 @@ It uses an O(n*n) algorithm, so if you have 1000 independent jobs it
|
|||
takes 22 seconds to start it.
|
||||
|
||||
https://github.com/themattrix/bash-concurrent
|
||||
(Last checked: 2021-02)
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN spawntool AND GNU Parallel
|
||||
|
@ -3358,7 +3760,6 @@ Summary (see legend above):
|
|||
B<spawn> reads a full command line from stdin which it executes in
|
||||
parallel.
|
||||
|
||||
|
||||
http://code.google.com/p/spawntool/
|
||||
(Last checked: 2021-07)
|
||||
|
||||
|
@ -3422,7 +3823,7 @@ Summary (see legend above):
|
|||
|
||||
=over
|
||||
|
||||
=item I1 I2 - - - - I7
|
||||
=item I1 I2 - - - - (I7)
|
||||
|
||||
=item - - M3 - - M6
|
||||
|
||||
|
@ -3439,6 +3840,34 @@ Summary (see legend above):
|
|||
B<go-parallel> uses Go templates for replacement strings. Quite
|
||||
similar to the I<{= perl expr =}> replacement string.
|
||||
|
||||
The basic replacement strings can be emulated by putting this into
|
||||
B<~/.parallel/config>:
|
||||
|
||||
--rpl '{{.Input}} '
|
||||
--rpl '{{.Time}} use DateTime; $_= DateTime->from_epoch(time);'
|
||||
--rpl '{{.Start}} use DateTime; $_= DateTime->from_epoch($^T);'
|
||||
|
||||
Then you can do:
|
||||
|
||||
seq 10 | parallel sleep {{.Input}}';' echo {{.Start}} {{.Time}}
|
||||
seq 10 | go-parallel -t 'bash -c "sleep {{.Input}}; echo \"{{.Start}}\" \"{{.Time}}\""'
|
||||
|
||||
If the input is too long (64K), you get no error:
|
||||
|
||||
perl -e 'print "works."."x"x100' | parallel.go -t 'echo {{noExt .Input}} '
|
||||
perl -e 'print "fails."."x"x100_000_000' | parallel.go -t 'echo {{noExt .Input}} '
|
||||
|
||||
Special chars are quoted:
|
||||
|
||||
echo '"&+<>' | go-parallel echo
|
||||
"&+<>
|
||||
|
||||
but not shell quoted when using replacement strings:
|
||||
|
||||
echo '"&+<>' | go-parallel -t 'echo {{.Input}}'
|
||||
"&+<>
|
||||
|
||||
|
||||
=head3 EXAMPLES FROM go-parallel
|
||||
|
||||
1$ go-parallel -a ./files.txt -t 'cp {{.Input}} {{.Input | dirname | dirname}}'
|
||||
|
@ -3453,8 +3882,14 @@ similar to the I<{= perl expr =}> replacement string.
|
|||
|
||||
3$ parallel -a ./files.txt echo mkdir -p {} {/.}
|
||||
|
||||
4$ time find ~/src/go -type f | go-parallel md5sum > /dev/null
|
||||
|
||||
4$ time find ~/src/go -type f | parallel md5sum > /dev/null
|
||||
# Though you would probably do this instead:
|
||||
time find ~/src/go -type f | parallel -X md5sum > /dev/null
|
||||
|
||||
https://github.com/mylanconnolly/parallel
|
||||
(Last checked: 2021-07)
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN p AND GNU Parallel
|
||||
|
@ -4063,7 +4498,7 @@ jobs to run in parallel.
|
|||
It is half as fast as GNU B<parallel> for short jobs.
|
||||
|
||||
https://github.com/thilinaba/bash-parallel
|
||||
(Last checked: 2023-05)
|
||||
(Last checked: 2024-06)
|
||||
|
||||
|
||||
=head2 DIFFERENCES BETWEEN PaSH AND GNU Parallel
|
||||
|
@ -4301,7 +4736,7 @@ Summary (see legend above):
|
|||
|
||||
=item - - - - - -
|
||||
|
||||
=item - O2 O3 N/A - O6 - x x ?O10
|
||||
=item - O2 O3 x - O6 - x x ?O10
|
||||
|
||||
=item E1 - - - E5 - -
|
||||
|
||||
|
@ -4402,21 +4837,22 @@ cause segfault.
|
|||
|
||||
=head3 EXAMPLES
|
||||
|
||||
simple.dat:
|
||||
simple.dat:
|
||||
|
||||
sleep 5
|
||||
foo
|
||||
cat alire.toml
|
||||
loc src/parallelize.adb
|
||||
sh loc src/*.ad?
|
||||
|
||||
1$ bin/parallelize -v <simple.dat
|
||||
|
||||
sleep 5
|
||||
foo
|
||||
cat alire.toml
|
||||
loc src/parallelize.adb
|
||||
sh loc src/*.ad?
|
||||
|
||||
1$ bin/parallelize -v <simple.dat
|
||||
|
||||
1$ parallel <simple.dat
|
||||
1$ parallel <simple.dat
|
||||
|
||||
https://github.com/simonjwright/parallelize
|
||||
(Last checked: 2024-04)
|
||||
|
||||
|
||||
=head2 Todo
|
||||
|
||||
https://github.com/justanhduc/task-spooler
|
||||
|
@ -4473,7 +4909,7 @@ This test stresses whether output mixes.
|
|||
|
||||
paralleltool="parallel -j 30"
|
||||
|
||||
cat <<-EOF > mycommand
|
||||
cat <<-'EOF' > mycommand
|
||||
#!/bin/bash
|
||||
|
||||
# If a, b, c, d, e, and f mix: Very bad
|
||||
|
@ -4483,18 +4919,26 @@ This test stresses whether output mixes.
|
|||
perl -e 'print STDERR "d"x3000_000," "'
|
||||
perl -e 'print STDOUT "e"x3000_000," "'
|
||||
perl -e 'print STDERR "f"x3000_000," "'
|
||||
echo
|
||||
echo >&2
|
||||
echo "stdout line 1 of id $@"
|
||||
echo "stderr line 1 of id $@" >&2
|
||||
perl -e 'print STDOUT "A"x3000_000," "'
|
||||
perl -e 'print STDERR "B"x3000_000," "'
|
||||
perl -e 'print STDOUT "C"x3000_000," "'
|
||||
perl -e 'print STDERR "D"x3000_000," "'
|
||||
perl -e 'print STDOUT "E"x3000_000," "'
|
||||
perl -e 'print STDERR "F"x3000_000," "'
|
||||
echo "stdout line 2 of id $@"
|
||||
echo "stderr line 2 of id $@" >&2
|
||||
EOF
|
||||
chmod +x mycommand
|
||||
|
||||
# Run 30 jobs in parallel
|
||||
seq 30 |
|
||||
$paralleltool ./mycommand > >(tr -s abcdef) 2> >(tr -s abcdef >&2)
|
||||
$paralleltool -j 30 ./mycommand > >(tr -s a-zA-Z) 2> >(tr -s a-zA-Z >&2)
|
||||
|
||||
# 'a c e' and 'b d f' should always stay together
|
||||
# and there should only be a single line per job
|
||||
|
||||
# For each job there be 2 lines of standard output and standard error
|
||||
# They should not be interleaved with other id's
|
||||
|
||||
=head2 STDERRMERGE: Stderr is merged with stdout
|
||||
|
||||
|
@ -4606,6 +5050,8 @@ buffers on disk, they may not clean up, if they are killed.
|
|||
|
||||
It is not uncommon for users to create files like:
|
||||
|
||||
=for pod2rst next-code-block: text
|
||||
|
||||
My brother's 12" *** record (costs $$$).jpg
|
||||
|
||||
Some tools break on this.
|
||||
|
@ -4668,7 +5114,12 @@ Some tools become very slow if output lines have many words.
|
|||
#!/bin/bash
|
||||
|
||||
paralleltool="parallel -j0"
|
||||
|
||||
|
||||
wcc() {
|
||||
parallel --recend '' --block 100M --pipe 'LC_ALL=C wc' |
|
||||
datamash -W sum 1 sum 2 sum 3
|
||||
}
|
||||
|
||||
cat <<-EOF > mycommand
|
||||
#!/bin/bash
|
||||
|
||||
|
@ -4677,7 +5128,7 @@ Some tools become very slow if output lines have many words.
|
|||
chmod +x mycommand
|
||||
|
||||
# Run 1 job
|
||||
seq 1 | $paralleltool ./mycommand | LC_ALL=C wc
|
||||
seq 1 | $paralleltool ./mycommand | wcc
|
||||
|
||||
|
||||
=head1 AUTHOR
|
||||
|
|
|
@ -905,6 +905,24 @@ combined in the correct order.
|
|||
{}0000000-{}9999999 https://example.com/the/big/file > file
|
||||
|
||||
|
||||
=head2 EXAMPLE: Keep order, but make job 1 output fast
|
||||
|
||||
If you want the output of job 1 unbuffered, but otherwise keep the
|
||||
order, you can do this:
|
||||
|
||||
doit() {
|
||||
echo "$@" ERR >&2
|
||||
echo "$@" out
|
||||
sleep 0.$1
|
||||
echo "$@" ERR >&2
|
||||
echo "$@" out
|
||||
}
|
||||
export -f doit
|
||||
parallel -k -u doit {= 'seq() > 1 and $opt::ungroup = 0' =} ::: 9 1 2 3
|
||||
|
||||
It will output job 1 with less overhead.
|
||||
|
||||
|
||||
=head2 EXAMPLE: Parallel grep
|
||||
|
||||
B<grep -r> greps recursively through directories. GNU B<parallel> can
|
||||
|
|
|
@ -2053,6 +2053,8 @@ your environment:
|
|||
|
||||
Output:
|
||||
|
||||
=for pod2rst next-code-block: text
|
||||
|
||||
Joe's var is green
|
||||
|
||||
The disadvantage is that if your environment is huge B<env_parallel>
|
||||
|
@ -2789,6 +2791,8 @@ This technique can be used for:
|
|||
|
||||
=item Common LISP:
|
||||
|
||||
=for pod2rst next-code-block: clisp
|
||||
|
||||
#!/usr/bin/parallel --shebang-wrap /usr/bin/clisp
|
||||
|
||||
(format t "~&~S~&" 'Arguments)
|
||||
|
@ -2959,6 +2963,8 @@ B<--help> will print a summary of the most important options:
|
|||
|
||||
Output:
|
||||
|
||||
=for pod2rst next-code-block: text
|
||||
|
||||
Usage:
|
||||
|
||||
parallel [options] [command [arguments]] < list_of_arguments
|
||||
|
@ -3032,6 +3038,8 @@ generated using B<--citation>:
|
|||
|
||||
Output:
|
||||
|
||||
=for pod2rst next-code-block: bash
|
||||
|
||||
Academic tradition requires you to cite works you base your article on.
|
||||
When using programs that use GNU Parallel to process data for publication
|
||||
please cite:
|
||||
|
|
|
@ -137,7 +137,7 @@ GetOptions(
|
|||
"help" => \$opt::dummy,
|
||||
) || exit(255);
|
||||
$Global::progname = ($0 =~ m:(^|/)([^/]+)$:)[1];
|
||||
$Global::version = 20240622;
|
||||
$Global::version = 20240722;
|
||||
if($opt::version) { version(); exit 0; }
|
||||
# Remove -D and --parallel=N
|
||||
my @s = (grep { ! /^-D$|^--parallel=\S+$/ }
|
||||
|
|
|
@ -91,6 +91,20 @@ sub pre2 {
|
|||
}
|
||||
}
|
||||
|
||||
sub pre3 {
|
||||
$/ = undef;
|
||||
# Default syntax language: Bash
|
||||
# If =for not already there, insert:
|
||||
# =for pod2rst next-code-block: bash
|
||||
$all = <STDIN>;
|
||||
@codepar = split/(?<=\n .{0,25}\S.{0,200}\n{2,10})(?=[0-9a-zA-Z=])/, $all;
|
||||
for(@codepar) {
|
||||
/=for pod2rst next-code-block:/ and next;
|
||||
s/((\n +\S))/\n=for pod2rst next-code-block: bash\n$1/;
|
||||
}
|
||||
print @codepar;
|
||||
}
|
||||
|
||||
sub pod2rst {
|
||||
exec "pod2rst";
|
||||
}
|
||||
|
@ -109,5 +123,5 @@ sub post {
|
|||
}
|
||||
}
|
||||
|
||||
# stdin | pre1() | pre2() | pod2rst() | post()
|
||||
pipefunc(*pre1,*pre2,*pod2rst,*post);
|
||||
# stdin | pre1() | pre2() | pre3() | pod2rst() | post()
|
||||
pipefunc(*pre1,*pre2,*pre3,*pod2rst,*post);
|
||||
|
|
27
src/sql
27
src/sql
|
@ -548,7 +548,7 @@ parse_options();
|
|||
|
||||
my $pass_through_options = (defined $::opt_p) ? join(" ",@{$::opt_p}) : "";
|
||||
my $dburl_or_alias = shift;
|
||||
if (not defined $dburl_or_alias) { Usage("No DBURL given"); exit -1; }
|
||||
if (not defined $dburl_or_alias) { usage("No DBURL given"); exit -1; }
|
||||
my %dburl = parse_dburl(get_alias($dburl_or_alias));
|
||||
|
||||
my $interactive_command;
|
||||
|
@ -670,7 +670,7 @@ $Global::Initfile && unlink $Global::Initfile;
|
|||
exit ($err);
|
||||
|
||||
sub parse_options {
|
||||
$Global::version = 20240622;
|
||||
$Global::version = 20240722;
|
||||
$Global::progname = 'sql';
|
||||
|
||||
# This must be done first as this may exec myself
|
||||
|
@ -716,7 +716,7 @@ sub parse_options {
|
|||
"verbose|v" => \$::opt_verbose,
|
||||
) || die_usage();
|
||||
|
||||
if(defined $::opt_help) { die_usage(); }
|
||||
if(defined $::opt_help) { usage(); exit(0); }
|
||||
if(defined $::opt_version) { version(); exit(0); }
|
||||
$Global::debug = $::opt_debug;
|
||||
}
|
||||
|
@ -1073,15 +1073,6 @@ sub find_command_in_path {
|
|||
return $path;
|
||||
}
|
||||
|
||||
sub Usage {
|
||||
if(@_) {
|
||||
print "Error:\n";
|
||||
print map{ "$_\n" } @_;
|
||||
print "\n";
|
||||
}
|
||||
print "sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [command]\n";
|
||||
}
|
||||
|
||||
sub get_alias {
|
||||
my $alias = shift;
|
||||
$alias =~ s/^(sql:)*//; # Accept aliases prepended with sql:
|
||||
|
@ -1134,7 +1125,7 @@ sub get_alias {
|
|||
if($dburl) {
|
||||
return get_alias($dburl.$rest);
|
||||
} else {
|
||||
Usage("$alias is not defined in @search");
|
||||
usage("$alias is not defined in @search");
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
|
@ -1199,7 +1190,7 @@ sub parse_dburl {
|
|||
" port ", $options{port}, " database ", $options{database},
|
||||
" query ",$options{query}, "\n");
|
||||
} else {
|
||||
Usage("$url is not a valid DBURL");
|
||||
usage("$url is not a valid DBURL");
|
||||
exit -1;
|
||||
}
|
||||
return %options;
|
||||
|
@ -1262,9 +1253,13 @@ sub die_usage {
|
|||
|
||||
sub usage {
|
||||
# Returns: N/A
|
||||
if(@_) {
|
||||
print map{ "$Global::progname: Error: $_\n" } @_;
|
||||
print "\n";
|
||||
}
|
||||
print "Usage:\n";
|
||||
print "$Global::progname [options] dburl [sqlcommand]\n";
|
||||
print "$Global::progname [options] dburl < sql_command_file\n";
|
||||
print "$Global::progname [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [sqlcommand]\n";
|
||||
print "$Global::progname [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl < sql_command_file\n";
|
||||
print "\n";
|
||||
print "See 'man $Global::progname' for the options\n";
|
||||
}
|
||||
|
|
|
@ -134,12 +134,11 @@ stopvm:
|
|||
parallel -j0 --tag -k '${stop}' ::: ${namedservers} || true
|
||||
|
||||
startdb:
|
||||
true TODO should start Oracle in vagrant
|
||||
startdb-old:
|
||||
#echo shutdown abort | sudo su - oracle -c "sqlplus / as sysdba"
|
||||
sudo parallel /etc/init.d/{} status '||' /etc/init.d/{} restart ::: postgresql mysql # oracle-xe
|
||||
VBoxManage startvm OracleXE || true
|
||||
parallel 'ping {} | read' ::: oracle11.tange.dk
|
||||
sql oracle://SYSTEM:$$VM_ORACLE_PWD@/FREE "select 'Oracle is running' from dual;" || \
|
||||
(cd vagrant-projects/OracleDatabase/23.4.0-Free && vagrant up && \
|
||||
sql oracle://SYSTEM:$$VM_ORACLE_PWD@/FREE "select 'Oracle is running' from dual;")
|
||||
stopdb:
|
||||
cd vagrant-projects/OracleDatabase/23.4.0-Free; vagrant suspend
|
||||
|
||||
### Distribution
|
||||
installparallel: ../src/parallel
|
||||
|
|
|
@ -132,13 +132,18 @@ install_oracle_client() {
|
|||
fi
|
||||
# libaio
|
||||
sudo apt install libaio1t64
|
||||
sudo ln -s libaio.so.1t64 /usr/lib/x86_64-linux-gnu/libaio.so.1
|
||||
perl -MCPAN -e 'install DBD::Oracle'
|
||||
# TODO set up vagrant oracle server
|
||||
git clone https://github.com/oracle/vagrant-projects.git
|
||||
# TODO set up default passwd
|
||||
echo sudo su - oracle -c "'/home/oracle/setPassword.sh $oracle_password'" |
|
||||
vagrant ssh
|
||||
# test it works: sql oracle://
|
||||
(
|
||||
cd vagrant-projects/OracleDatabase/23.4.0-Free
|
||||
echo export VM_ORACLE_PWD=`goodpasswd` >> ~/.passwords
|
||||
. ~/.passwords
|
||||
vagrant up
|
||||
)
|
||||
# test it works:
|
||||
sql --showtables oracle://SYSTEM:$VM_ORACLE_PWD@/FREE
|
||||
}
|
||||
|
||||
setup_databases() {
|
||||
|
|
|
@ -92,7 +92,7 @@ echo '### -H and --hard'
|
|||
niceload --hard -l 9 uptime | grep ':.[1-9][0-9].[0-9][0-9],' || echo OK-load below 10
|
||||
EOF
|
||||
|
||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 --joblog /tmp/jl-`basename $0` -L1
|
||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel --timeout 300 -vj0 --joblog /tmp/jl-`basename $0` -L1
|
||||
echo '### -f and --factor'
|
||||
niceload -H --factor 30 -l6 echo factor 30 finish last
|
||||
niceload -H -f 0.01 -l6 echo f 0.1 finish first
|
||||
|
|
0
testsuite/tests-to-run/parallel-local-0.3s.sh
Normal file → Executable file
0
testsuite/tests-to-run/parallel-local-0.3s.sh
Normal file → Executable file
|
@ -8,6 +8,19 @@
|
|||
# Each should be taking 1-3s and be possible to run in parallel
|
||||
# I.e.: No race conditions, no logins
|
||||
|
||||
par_keep_order_make_job_1_output_fast() {
|
||||
echo '# EXAMPLE: Keep order, but make job 1 output fast'
|
||||
doit() {
|
||||
echo "$@" ERR >&2
|
||||
echo "$@" out
|
||||
sleep 0.$1
|
||||
echo "$@" ERR >&2
|
||||
echo "$@" out
|
||||
}
|
||||
export -f doit
|
||||
parallel -k -u doit {= 'seq() > 1 and $opt::ungroup = 0' =} ::: 9 1 2 3
|
||||
}
|
||||
|
||||
par_citation_no_config_dir() {
|
||||
echo '### bug #64329: parallel --citation will loop forever unless the config dir exists'
|
||||
t=$(mktemp -d)
|
||||
|
|
|
@ -514,24 +514,6 @@ par_race_condition1() {
|
|||
rm /tmp/parallel_race_cond
|
||||
}
|
||||
|
||||
par__memory_leak() {
|
||||
a_run() {
|
||||
seq $1 |time -v parallel true 2>&1 |
|
||||
grep 'Maximum resident' |
|
||||
field 6;
|
||||
}
|
||||
export -f a_run
|
||||
echo "### Test for memory leaks"
|
||||
echo "Of 300 runs of 1 job at least one should be bigger than a 3000 job run"
|
||||
. env_parallel.bash
|
||||
parset small_max,big ::: 'seq 300 | parallel a_run 1 | jq -s max' 'a_run 3000'
|
||||
if [ $small_max -lt $big ] ; then
|
||||
echo "Bad: Memleak likely."
|
||||
else
|
||||
echo "Good: No memleak detected."
|
||||
fi
|
||||
}
|
||||
|
||||
par_slow_total_jobs() {
|
||||
echo 'bug #51006: Slow total_jobs() eats job'
|
||||
(echo a; sleep 15; echo b; sleep 15; seq 2) |
|
||||
|
|
|
@ -1541,7 +1541,7 @@ line2"' 'echo "command2"'
|
|||
) | replace_tmpdir
|
||||
}
|
||||
|
||||
par_parset2() {
|
||||
par__parset2() {
|
||||
echo '### parset into array'
|
||||
(
|
||||
. `which env_parallel.bash`
|
||||
|
|
33
testsuite/tests-to-run/parallel-local-leak.sh
Executable file
33
testsuite/tests-to-run/parallel-local-leak.sh
Executable file
|
@ -0,0 +1,33 @@
|
|||
#!/bin/bash
|
||||
|
||||
# SPDX-FileCopyrightText: 2021-2024 Ole Tange, http://ole.tange.dk and Free Software and Foundation, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
# Simple jobs that never fails
|
||||
# Each should be taking 30-100s and be possible to run in parallel
|
||||
# I.e.: No race conditions, no logins
|
||||
|
||||
par__memory_leak() {
|
||||
a_run() {
|
||||
seq $1 |time -v parallel true 2>&1 |
|
||||
grep 'Maximum resident' |
|
||||
field 6;
|
||||
}
|
||||
export -f a_run
|
||||
echo "### Test for memory leaks"
|
||||
echo "Of 300 runs of 1 job at least one should be bigger than a 3000 job run"
|
||||
. env_parallel.bash
|
||||
parset small_max,big ::: 'seq 300 | parallel a_run 1 | jq -s max' 'a_run 3000'
|
||||
# Perl 5.38.2 has a small leak (~300KB) - not present in 5.2X.X
|
||||
# TODO find out which perl version introduces this
|
||||
echo "`date` [ $small_max < $big ]" >> /tmp/parallel-mem-leak.out
|
||||
if [ $(($small_max+500)) -lt $big ] ; then
|
||||
echo "Bad: Memleak likely. [ $small_max < $big ]"
|
||||
else
|
||||
echo "Good: No memleak detected."
|
||||
fi
|
||||
}
|
||||
export -f $(compgen -A function | grep par_)
|
||||
compgen -A function | G par_ "$@" | sort |
|
||||
parallel --delay 0.3 --timeout 300% -j6 --lb --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1'
|
|
@ -39,13 +39,13 @@ par__sshpass_with_password() {
|
|||
echo '### Crazy passwords: `date>>/tmp/trap`;(|<*&)'"'"
|
||||
> /tmp/trap
|
||||
(
|
||||
# These fail. The important part is that /tmp/trap is empty
|
||||
echo '# These fail. The important part is that /tmp/trap is empty'
|
||||
stdout parallel --onall -S5/user:'`date>>/tmp/trap`;'@host echo ::: A
|
||||
stdout parallel --onall -S5/user:'`date>>/tmp/trap`;(|<*&)'"'"@host echo ::: A
|
||||
) | perl -pe 's/([a-f0-9]{100,} )+[a-f0-9]{1,}/HEX/g; s/\r/\n/g;' |
|
||||
perl -pe 's/(ssh: Could not resolve hostname host:) .*/$1/'
|
||||
echo This must stay empty:
|
||||
cat /tmp/trap
|
||||
grep . /tmp/trap || echo OK
|
||||
}
|
||||
|
||||
par_--ssh_ssh_in_ssh() {
|
||||
|
|
|
@ -189,7 +189,8 @@ par__--tmux_different_shells() {
|
|||
}
|
||||
|
||||
par_--tmux_length() {
|
||||
echo '### works'
|
||||
echo '### tmux examples that earlier blocked'
|
||||
echo 'Runtime 14 seconds on non-loaded machine'
|
||||
short_TMPDIR() {
|
||||
# TMPDIR must be short for -M
|
||||
export TMPDIR=/tmp/ssh/'
|
||||
|
@ -236,5 +237,5 @@ par_z_multiple_hosts_repeat_arg() {
|
|||
|
||||
export -f $(compgen -A function | grep par_)
|
||||
compgen -A function | G par_ "$@" | LC_ALL=C sort |
|
||||
parallel --timeout 200 -j6 --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1' |
|
||||
parallel --timeout 250 -j6 --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1' |
|
||||
perl -pe 's:/usr/bin:/bin:g;'
|
||||
|
|
|
@ -6,6 +6,25 @@
|
|||
|
||||
echo '### test --env _, env_parallel for different shells'
|
||||
|
||||
retry() {
|
||||
times=$1
|
||||
shift
|
||||
declare -a array_runs
|
||||
first_run=$($@)
|
||||
array_runs+=("$first_run")
|
||||
for ((i=1; i<=$times; i++)); do
|
||||
run=$($@)
|
||||
exit=$?
|
||||
if [[ " ${array_runs[@]} " =~ " $run " ]]; then
|
||||
echo "$run"
|
||||
return $exit
|
||||
fi
|
||||
done
|
||||
echo "$run"
|
||||
return $exit
|
||||
}
|
||||
export -f retry
|
||||
|
||||
#
|
||||
## par_*_man = tests from the man page
|
||||
#
|
||||
|
@ -281,15 +300,11 @@ par__man_fish() {
|
|||
|
||||
set myarray arrays 'with = & " !'" '" work, too
|
||||
echo $myarray[1] $myarray[2] $myarray[3] $myarray[4]
|
||||
sleep 0.1
|
||||
echo "# these 4 fail often. Race condition?"
|
||||
env_parallel -k echo '$myarray[{}]' ::: 1 2 3 4
|
||||
sleep 0.1
|
||||
env_parallel -k -S server echo '$myarray[{}]' ::: 1 2 3 4
|
||||
sleep 0.1
|
||||
env_parallel -k --env myarray echo '$myarray[{}]' ::: 1 2 3 4
|
||||
sleep 0.1
|
||||
env_parallel -k --env myarray -S server echo '$myarray[{}]' ::: 1 2 3 4
|
||||
|
||||
env_parallel --argsep --- env_parallel -k echo ::: multi level --- env_parallel
|
||||
|
||||
env_parallel ::: true false true false
|
||||
|
@ -815,12 +830,7 @@ par_--env_underscore_fish() {
|
|||
set myarray and arrays in;
|
||||
|
||||
echo Test copying;
|
||||
env_parallel myfunc ::: work;
|
||||
env_parallel -S server myfunc ::: work;
|
||||
env_parallel --env myfunc,myvar,myarray,myecho myfunc ::: work;
|
||||
env_parallel --env myfunc,myvar,myarray,myecho -S server myfunc ::: work;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
echo '*** Moved to parallel-ssh-fish.sh ***'
|
||||
|
||||
echo Test ignoring;
|
||||
env_parallel --env _ -S server not_copied_alias ::: error=OK;
|
||||
|
@ -3152,14 +3162,7 @@ _EOF
|
|||
|
||||
export -f $(compgen -A function | grep par_)
|
||||
|
||||
# --retries 2 due to ssh_exchange_identification: read: Connection reset by peer
|
||||
|
||||
#compgen -A function | grep par_ | sort | parallel --delay $D -j$P --tag -k '{} 2>&1'
|
||||
#compgen -A function | grep par_ | sort |
|
||||
compgen -A function | G par_ "$@" | LC_ALL=C sort |
|
||||
# parallel --joblog /tmp/jl-`basename $0` --delay $D -j$P --tag -k '{} 2>&1'
|
||||
# 2019-07-14 200% too high for 16 GB/4 thread
|
||||
parallel --joblog /tmp/jl-`basename $0` -j75% --retries 2 --tag -k '{} 2>&1' |
|
||||
clean_output() {
|
||||
perl -pe 's/line \d\d+/line 99/g;
|
||||
s/\d+ >= \d+/999 >= 999/;
|
||||
s/sh:? \d?\d\d:/sh: 999:/;
|
||||
|
@ -3171,3 +3174,18 @@ compgen -A function | G par_ "$@" | LC_ALL=C sort |
|
|||
s!/tmp/par-job-\d+_.....!script!g;
|
||||
s/script: \d\d+/script: 99/g;
|
||||
'
|
||||
}
|
||||
|
||||
# --retries 2 due to ssh_exchange_identification: read: Connection reset by peer
|
||||
|
||||
#compgen -A function | grep par_ | sort | parallel --delay $D -j$P --tag -k '{} 2>&1'
|
||||
#compgen -A function | grep par_ | sort |
|
||||
compgen -A function | G par_ "$@" | LC_ALL=C sort | G -v fish |
|
||||
# 2019-07-14 200% too high for 16 GB/4 thread
|
||||
parallel --joblog /tmp/jl-`basename $0` -j75% --retries 2 --tag -k '{} 2>&1' |
|
||||
clean_output
|
||||
|
||||
compgen -A function | G par_ "$@" | LC_ALL=C sort | G fish |
|
||||
# 2024-07-18 fish is prone to racing
|
||||
parallel --joblog /tmp/jl-`basename $0` -j1 --retries 2 --tag -k '{} 2>&1' |
|
||||
clean_output
|
||||
|
|
|
@ -29,7 +29,7 @@ export -f par_tmux
|
|||
# echo '### bug #48841: --tmux(pane) --fg should start tmux in foreground'
|
||||
# stdout /usr/bin/time -f %e script -q -f -c /tmp/parallel-local7-script /dev/null | perl -ne '$_ >= 26 and $_ <= 45 and print "OK\n"'
|
||||
|
||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj8 --delay 1 --timeout 20 --retries 3 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj8 --delay 1 --timeout 30 --retries 3 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||
|
||||
echo '### tmux-1.9'
|
||||
seq 510 512 | PARALLEL_TMUX=tmux-1.9 par_tmux
|
||||
|
|
262
testsuite/tests-to-run/parallel-ssh-fish.sh
Executable file
262
testsuite/tests-to-run/parallel-ssh-fish.sh
Executable file
|
@ -0,0 +1,262 @@
|
|||
#!/bin/bash
|
||||
|
||||
# SPDX-FileCopyrightText: 2021-2024 Ole Tange, http://ole.tange.dk and Free Software and Foundation, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
# Run parts from parallel-local-ssh7.sh that fail often
|
||||
# I think there is a race condition in fish
|
||||
|
||||
par__man_fish() {
|
||||
echo '### fish'
|
||||
myscript=$(cat <<'_EOF'
|
||||
echo "### From man env_parallel"
|
||||
|
||||
env_parallel --session
|
||||
alias myecho='echo aliases with \= \& \" \!'" \'"
|
||||
myecho work
|
||||
env_parallel myecho ::: work
|
||||
env_parallel -S server myecho ::: work
|
||||
env_parallel --env myecho myecho ::: work
|
||||
env_parallel --env myecho -S server myecho ::: work
|
||||
|
||||
# multiline aliases does not work in fish
|
||||
|
||||
function myfunc
|
||||
echo functions 'with = & " !'" '" $argv;
|
||||
end
|
||||
myfunc work
|
||||
env_parallel myfunc ::: work
|
||||
env_parallel -S server myfunc ::: work
|
||||
env_parallel --env myfunc myfunc ::: work
|
||||
env_parallel --env myfunc -S server myfunc ::: work
|
||||
|
||||
set myvar 'variables with = & " !'" '"
|
||||
echo "$myvar" work
|
||||
env_parallel echo '$myvar' ::: work
|
||||
env_parallel -S server echo '$myvar' ::: work
|
||||
env_parallel --env myvar echo '$myvar' ::: work
|
||||
env_parallel --env myvar -S server echo '$myvar' ::: work
|
||||
|
||||
set multivar 'multiline
|
||||
variables with = & " !'" '"
|
||||
echo "$multivar" work
|
||||
env_parallel echo '"$multivar"' ::: work
|
||||
env_parallel -S server echo '"$multivar"' ::: work
|
||||
env_parallel --env multivar echo '"$multivar"' ::: work
|
||||
env_parallel --env multivar -S server echo '"$multivar"' ::: work
|
||||
|
||||
set myarray arrays 'with = & " !'" '" work, too
|
||||
echo $myarray[1] $myarray[2] $myarray[3] $myarray[4]
|
||||
echo "# these 4 fail often. Race condition?"
|
||||
env_parallel -k echo '$myarray[{}]' ::: 1 2 3 4
|
||||
env_parallel -k -S server echo '$myarray[{}]' ::: 1 2 3 4
|
||||
env_parallel -k --env myarray echo '$myarray[{}]' ::: 1 2 3 4
|
||||
env_parallel -k --env myarray -S server echo '$myarray[{}]' ::: 1 2 3 4
|
||||
env_parallel --argsep --- env_parallel -k echo ::: multi level --- env_parallel
|
||||
|
||||
env_parallel ::: true false true false
|
||||
echo exit value $status should be 2
|
||||
|
||||
env_parallel --no-such-option >/dev/null
|
||||
echo exit value $status should be 255 `sleep 1`
|
||||
_EOF
|
||||
)
|
||||
ssh fish@lo "$myscript"
|
||||
#| LC_ALL=C sort
|
||||
}
|
||||
|
||||
par_--env_underscore_fish() {
|
||||
echo '### fish'
|
||||
myscript=$(cat <<'_EOF'
|
||||
echo "Fish is broken"
|
||||
echo "### Testing of --env _"
|
||||
|
||||
source (which env_parallel.fish)
|
||||
true > ~/.parallel/ignored_vars;
|
||||
|
||||
alias not_copied_alias="echo BAD"
|
||||
function not_copied_func
|
||||
echo BAD
|
||||
end
|
||||
set not_copied_var "BAD";
|
||||
set not_copied_array BAD BAD BAD;
|
||||
# env_parallel --record-env;
|
||||
env_parallel --session;
|
||||
alias myecho="echo \$myvar aliases";
|
||||
function myfunc
|
||||
myecho $myarray functions $argv
|
||||
end
|
||||
set myvar "variables in";
|
||||
set myarray and arrays in;
|
||||
|
||||
echo Test copying;
|
||||
env_parallel myfunc ::: work;
|
||||
env_parallel -S server myfunc ::: work;
|
||||
env_parallel --env myfunc,myvar,myarray,myecho myfunc ::: work;
|
||||
env_parallel --env myfunc,myvar,myarray,myecho -S server myfunc ::: work;
|
||||
env_parallel --env _ myfunc ::: work;
|
||||
env_parallel --env _ -S server myfunc ::: work;
|
||||
|
||||
# echo Test ignoring;
|
||||
# env_parallel --env _ -S server not_copied_alias ::: error=OK;
|
||||
# env_parallel --env _ -S server not_copied_func ::: error=OK;
|
||||
# env_parallel --env _ -S server echo \$not_copied_var ::: error=OK;
|
||||
# env_parallel --env _ -S server echo \$not_copied_array ::: error=OK;
|
||||
#
|
||||
# echo Test single ignoring;
|
||||
# echo myvar > ~/.parallel/ignored_vars;
|
||||
# env_parallel --env _ myfunc ::: work;
|
||||
# sleep 0.1
|
||||
# env_parallel --env _ -S server myfunc ::: work;
|
||||
# sleep 0.1
|
||||
# echo myarray >> ~/.parallel/ignored_vars;
|
||||
# env_parallel --env _ myfunc ::: work;
|
||||
# env_parallel --env _ -S server myfunc ::: work;
|
||||
# echo myecho >> ~/.parallel/ignored_vars;
|
||||
# env_parallel --env _ myfunc ::: work;
|
||||
# echo "OK if ^^^^^^^^^^^^^^^^^ no myecho" >&2;
|
||||
# env_parallel --env _ -S server myfunc ::: work;
|
||||
# echo "OK if ^^^^^^^^^^^^^^^^^ no myecho" >&2;
|
||||
# echo myfunc >> ~/.parallel/ignored_vars;
|
||||
# env_parallel --env _ myfunc ::: work;
|
||||
# echo "OK if ^^^^^^^^^^^^^^^^^ no myfunc" >&2;
|
||||
# env_parallel --env _ -S server myfunc ::: work;
|
||||
# echo "OK if ^^^^^^^^^^^^^^^^^ no myfunc" >&2;
|
||||
_EOF
|
||||
)
|
||||
# Old versions of fish sometimes throw up bugs all over,
|
||||
# but seem to work OK otherwise. So ignore these errors.
|
||||
stdout ssh fish@lo "$myscript" |
|
||||
perl -ne '/^\^|fish:|fish\(/ and next; print' |
|
||||
perl -pe 's/^[ ~^]+$//g'
|
||||
}
|
||||
|
||||
|
||||
par_funky_fish() {
|
||||
myscript=$(cat <<'_EOF'
|
||||
env_parallel --session
|
||||
set myvar "myvar works"
|
||||
setenv myenvvar "myenvvar works"
|
||||
|
||||
set funky (perl -e "print pack \"c*\", 1..255")
|
||||
# 10 and 30 cause problems
|
||||
setenv funkyenv (perl -e "print pack \"c*\", 1..9,11..29,31..255")
|
||||
|
||||
set myarray "" array_val2 3 "" 5 " space 6 "
|
||||
|
||||
# Assoc arrays do not exist
|
||||
#typeset -A assocarr
|
||||
#assocarr[a]=assoc_val_a
|
||||
#assocarr[b]=assoc_val_b
|
||||
alias alias_echo="echo 3 arg";
|
||||
|
||||
function func_echo
|
||||
echo $argv;
|
||||
echo "$myvar"
|
||||
echo "$myenvvar"
|
||||
echo "$myarray[6]"
|
||||
# Assoc arrays do not exist in fish
|
||||
# echo ${assocarr[a]}
|
||||
echo
|
||||
echo
|
||||
echo
|
||||
echo Funky-"$funky"-funky
|
||||
echo Funkyenv-"$funkyenv"-funkyenv
|
||||
echo
|
||||
echo
|
||||
echo
|
||||
end
|
||||
|
||||
env_parallel alias_echo ::: alias_works
|
||||
env_parallel func_echo ::: function_works
|
||||
env_parallel -S fish@lo alias_echo ::: alias_works_over_ssh
|
||||
env_parallel -S fish@lo func_echo ::: function_works_over_ssh
|
||||
echo
|
||||
echo "$funky" | parallel --shellquote
|
||||
_EOF
|
||||
)
|
||||
ssh fish@lo "$myscript"
|
||||
}
|
||||
|
||||
par_env_parallel_fish() {
|
||||
myscript=$(cat <<'_EOF'
|
||||
echo 'bug #50435: Remote fifo broke in 20150522'
|
||||
# Due to $PARALLEL_TMP being transferred
|
||||
env_parallel --session
|
||||
set OK OK
|
||||
echo data from stdin | env_parallel --pipe -S lo --fifo 'cat {}; and echo $OK'
|
||||
echo data from stdin | env_parallel --pipe -S lo --cat 'cat {}; and echo $OK'
|
||||
echo OK: 0==$status
|
||||
echo '### Test failing command with --cat'
|
||||
echo data from stdin | env_parallel --pipe -S lo --cat 'cat {}; false'
|
||||
echo OK: 1==$status
|
||||
echo data from stdin | parallel --pipe -S lo --cat 'cat {}; false'
|
||||
echo OK: 1==$status
|
||||
_EOF
|
||||
)
|
||||
ssh fish@lo "$myscript"
|
||||
}
|
||||
|
||||
par_env_parallel_--session_fish() {
|
||||
myscript=$(cat <<'_EOF'
|
||||
. (which env_parallel.fish)
|
||||
|
||||
echo '### Test env_parallel --session'
|
||||
|
||||
alias aliasbefore='echo before'
|
||||
set varbefore 'before'
|
||||
function funcbefore
|
||||
echo 'before' "$argv"
|
||||
end
|
||||
set arraybefore array before
|
||||
env_parallel --session
|
||||
# stuff defined
|
||||
env_parallel aliasbefore ::: must_fail
|
||||
env_parallel -S lo aliasbefore ::: must_fail
|
||||
env_parallel funcbefore ::: must_fail
|
||||
env_parallel -S lo funcbefore ::: must_fail
|
||||
env_parallel echo '$varbefore' ::: no_before
|
||||
env_parallel -S lo echo '$varbefore' ::: no_before
|
||||
env_parallel echo '$arraybefore' ::: no_before
|
||||
env_parallel -S lo echo '$arraybefore' ::: no_before
|
||||
alias aliasafter='echo after'
|
||||
set varafter 'after'
|
||||
function funcafter
|
||||
echo 'after' "$argv"
|
||||
end
|
||||
set arrayafter array after
|
||||
env_parallel aliasafter ::: aliasafter_OK
|
||||
env_parallel -S lo aliasafter ::: aliasafter_OK
|
||||
env_parallel funcafter ::: funcafter_OK
|
||||
env_parallel -S lo funcafter ::: funcafter_OK
|
||||
env_parallel echo '$varafter' ::: varafter_OK
|
||||
env_parallel -S lo echo '$varafter' ::: varafter_OK
|
||||
env_parallel echo '$arrayafter' ::: arrayafter_OK
|
||||
env_parallel -S lo echo '$arrayafter' ::: arrayafter_OK
|
||||
set -e PARALLEL_IGNORED_NAMES
|
||||
_EOF
|
||||
)
|
||||
ssh fish@lo "$myscript" 2>&1 |
|
||||
perl -pe 's/^[ ~^]+$//g'
|
||||
}
|
||||
|
||||
export -f $(compgen -A function | grep par_)
|
||||
|
||||
clean_output() {
|
||||
perl -pe 's/line \d\d+/line 99/g;
|
||||
s/\d+ >= \d+/999 >= 999/;
|
||||
s/sh:? \d?\d\d:/sh: 999:/;
|
||||
s/:\d?\d\d:/:999:/;
|
||||
s/sh\[\d+\]/sh[999]/;
|
||||
s/.*(tange|zenodo).*//i;
|
||||
s:/usr/bin:/bin:g;
|
||||
s:/tmp/par-job-\d+_.....\[\d+\]:script[9]:g;
|
||||
s!/tmp/par-job-\d+_.....!script!g;
|
||||
s/script: \d\d+/script: 99/g;
|
||||
'
|
||||
}
|
||||
|
||||
compgen -A function | G par_ "$@" | LC_ALL=C sort |
|
||||
parallel --joblog /tmp/jl-`basename $0` -j1 --retries 2 --tag -k '{} 2>&1' |
|
||||
clean_output
|
|
@ -23,7 +23,7 @@ srcdir=$(echo "$testsuitedir" | perl -pe 's=$ENV{HOME}==')
|
|||
export SERVER1=parallel@lo
|
||||
export SERVER2=csh@lo
|
||||
export PARALLEL=-k
|
||||
perl -ne '$/="\n\n"; /^Output/../^[^O]\S/ and next; /^ / and print;' "$testsuitedir"/../src/parallel_tutorial.pod |
|
||||
perl -ne '$/="\n\n"; /^Output/../^[^O=]\S/ and next; /^ / and print;' "$testsuitedir"/../src/parallel_tutorial.pod |
|
||||
egrep -v 'curl|tty|parallel_tutorial|interactive|example.(com|net)' |
|
||||
egrep -v 'shellquote|works|num128|--filter-hosts|--tmux|my_id' |
|
||||
perl -pe 's/username@//;s/user@//;
|
||||
|
|
|
@ -63,7 +63,6 @@ EOF
|
|||
sql $MYSQL_TEST_DBURL/sqlunittest <"$unittest"
|
||||
}
|
||||
|
||||
|
||||
testtable() {
|
||||
tbl=$1
|
||||
cat <<EOF
|
||||
|
@ -97,7 +96,7 @@ par_sql_aliases() {
|
|||
sql sql:sql::sqlunittest "SELECT 'Yes it works' as 'Test sql:sql::alias';"
|
||||
}
|
||||
|
||||
par_noheaders() {
|
||||
par__noheaders() {
|
||||
echo "### Test --noheaders --no-headers -n"
|
||||
testtable noheader | sql "$DBURL"
|
||||
sql -n "$DBURL" 'select * from noheader order by id' |
|
||||
|
@ -108,7 +107,7 @@ par_noheaders() {
|
|||
parallel -k --colsep '\t' echo {2} {1}
|
||||
}
|
||||
|
||||
par_--sep() {
|
||||
par_sep() {
|
||||
echo "### Test --sep -s";
|
||||
sql --no-headers -s : pg:/// 'select 1,2' |
|
||||
parallel --colsep ':' echo {2} {1}
|
||||
|
@ -116,7 +115,7 @@ par_--sep() {
|
|||
parallel --colsep ':' echo {2} {1}
|
||||
}
|
||||
|
||||
par_--passthrough() {
|
||||
par_passthrough() {
|
||||
echo "### Test --passthrough -p";
|
||||
testtable passthrough | sql "$DBURL"
|
||||
sql -p -H "$DBURL" 'select * from passthrough'
|
||||
|
@ -125,68 +124,68 @@ par_--passthrough() {
|
|||
echo
|
||||
}
|
||||
|
||||
par_--html() {
|
||||
par_html() {
|
||||
echo "### Test --html";
|
||||
testtable html | sql "$DBURL"
|
||||
sql --html "$DBURL" 'select * from html'
|
||||
echo
|
||||
}
|
||||
|
||||
par_listproc() {
|
||||
par__listproc() {
|
||||
echo "### Test --show-processlist|proclist|listproc";
|
||||
# Take the minimum of 3 runs to avoid error counting
|
||||
# if one of the other jobs happens to be running
|
||||
(
|
||||
sql --show-processlist "$DBURL" | wc -lw
|
||||
sql --show-processlist "$DBURL" | wc -lw
|
||||
sql --show-processlist "$DBURL" | wc -lw
|
||||
) | sort | head -n1
|
||||
(
|
||||
sql --proclist "$DBURL" | wc -lw
|
||||
sql --proclist "$DBURL" | wc -lw
|
||||
sql --proclist "$DBURL" | wc -lw
|
||||
) | sort | head -n1
|
||||
(
|
||||
sql --listproc "$DBURL" | wc -lw
|
||||
sql --listproc "$DBURL" | wc -lw
|
||||
sql --listproc "$DBURL" | wc -lw
|
||||
) | sort | head -n1
|
||||
}
|
||||
|
||||
par_dbsize() {
|
||||
par__dbsize() {
|
||||
echo "### Test --db-size --dbsize";
|
||||
sql --dbsize "$DBURL" | wc -w
|
||||
sql --db-size "$DBURL" | wc -w
|
||||
}
|
||||
|
||||
par_tablesize() {
|
||||
par__tablesize() {
|
||||
echo "### Test --table-size --tablesize"
|
||||
sql --showtables "$DBURL" | grep TBL | parallel sql "$DBURL" drop table
|
||||
sql --tablesize "$DBURL" | wc -l
|
||||
sql --table-size "$DBURL" | wc -l
|
||||
}
|
||||
|
||||
par_--debug() {
|
||||
par_debug() {
|
||||
echo "### Test --debug"
|
||||
stdout sql --debug "$DBURL" "SELECT 'Yes it does' as 'Test if --debug works';" |
|
||||
replace_tmpdir |
|
||||
perl -pe 's:/...........sql:/tmpfile:g'
|
||||
}
|
||||
|
||||
par_-_version() {
|
||||
par_version() {
|
||||
echo "### Test --version -V"
|
||||
sql --version | wc
|
||||
sql -V | wc
|
||||
}
|
||||
|
||||
par_-r() {
|
||||
par_retry() {
|
||||
echo "### Test -r - retry 3 times"
|
||||
stdout sql -r --debug pg://nongood@127.0.0.3:2227/ "SELECT 'This should fail 3 times';"
|
||||
}
|
||||
|
||||
par_--retries() {
|
||||
echo "### Test --retries=s"
|
||||
stdout sql --retries=4 --debug pg://nongood@127.0.0.3:2227/ "SELECT 'This should fail 4 times';"
|
||||
}
|
||||
|
||||
par_--help() {
|
||||
par_help() {
|
||||
echo "### Test --help -h"
|
||||
sql --help
|
||||
sql -h
|
||||
|
@ -195,4 +194,4 @@ par_--help() {
|
|||
|
||||
export -f $(compgen -A function | grep par_)
|
||||
compgen -A function | G par_ "$@" | LC_ALL=C sort |
|
||||
parallel --timeout 10 -j0 --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1'
|
||||
parallel --timeout 1000% -j0 --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1'
|
||||
|
|
|
@ -4,6 +4,9 @@
|
|||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
# Start
|
||||
(cd "$testsuitedir"; stdout make startdb) >/dev/tty
|
||||
|
||||
mysqlrootpass=${mysqlrootpass:-M-b+Ydjq4ejT4E}
|
||||
MYSQL_ADMIN_DBURL=mysql://root:$mysqlrootpass@/mysql
|
||||
|
||||
|
@ -84,7 +87,7 @@ par_test_dburl_colon() {
|
|||
|
||||
par_multiarg_on_command_line() {
|
||||
echo "### Test oracle with multiple arguments on the command line"
|
||||
echo ":oraunittest oracle://hr:hr@oracle11.tange.dk/xe" >> ~/.sql/aliases
|
||||
echo ":oraunittest oracle://SYSTEM:$VM_ORACLE_PWD@/FREE" >> ~/.sql/aliases
|
||||
uniqify ~/.sql/aliases
|
||||
sql :oraunittest "WHENEVER SQLERROR EXIT FAILURE" "SELECT 'arg2' FROM DUAL;" "SELECT 'arg3' FROM DUAL;"
|
||||
}
|
||||
|
@ -106,7 +109,11 @@ par_showdatabases() {
|
|||
|
||||
par_listproc() {
|
||||
echo "### Test --listproc"
|
||||
sql --listproc :oraunittest
|
||||
sql --listproc :oraunittest |
|
||||
perl -ne '/select 1 from dual|user_objects|user_tablespaces|connect_by_filtering/ and next;
|
||||
s/[21]\.\d+/1.99999/;
|
||||
s/ +/ /g;
|
||||
print'
|
||||
sql --listproc $MYSQL_TEST_DBURL |
|
||||
perl -pe 's/^\d+/XXX/'
|
||||
}
|
||||
|
|
|
@ -211,6 +211,23 @@ par_keep_order ### Bug made 3 go before 1 2
|
|||
par_keep_order 1
|
||||
par_keep_order 2
|
||||
par_keep_order 3
|
||||
par_keep_order_make_job_1_output_fast # EXAMPLE: Keep order, but make job 1 output fast
|
||||
par_keep_order_make_job_1_output_fast 9 ERR
|
||||
par_keep_order_make_job_1_output_fast 9 out
|
||||
par_keep_order_make_job_1_output_fast 9 ERR
|
||||
par_keep_order_make_job_1_output_fast 9 out
|
||||
par_keep_order_make_job_1_output_fast 1 out
|
||||
par_keep_order_make_job_1_output_fast 1 out
|
||||
par_keep_order_make_job_1_output_fast 1 ERR
|
||||
par_keep_order_make_job_1_output_fast 1 ERR
|
||||
par_keep_order_make_job_1_output_fast 2 out
|
||||
par_keep_order_make_job_1_output_fast 2 out
|
||||
par_keep_order_make_job_1_output_fast 2 ERR
|
||||
par_keep_order_make_job_1_output_fast 2 ERR
|
||||
par_keep_order_make_job_1_output_fast 3 out
|
||||
par_keep_order_make_job_1_output_fast 3 out
|
||||
par_keep_order_make_job_1_output_fast 3 ERR
|
||||
par_keep_order_make_job_1_output_fast 3 ERR
|
||||
par_long_input ### Long input lines should not fail if they are not used
|
||||
par_long_input a a a a
|
||||
par_long_input b b b b
|
||||
|
|
|
@ -1527,9 +1527,6 @@ par__groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
|
|||
par__groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 90001 1170031
|
||||
par__keeporder_roundrobin bug #50081: --keep-order --round-robin should give predictable results
|
||||
par__keeporder_roundrobin OK
|
||||
par__memory_leak ### Test for memory leaks
|
||||
par__memory_leak Of 300 runs of 1 job at least one should be bigger than a 3000 job run
|
||||
par__memory_leak Good: No memleak detected.
|
||||
par__plus_dyn_repl Dynamic replacement strings defined by --plus
|
||||
par__plus_dyn_repl myval
|
||||
par__plus_dyn_repl myval
|
||||
|
|
|
@ -254,6 +254,57 @@ par__argfile_plus 2 11 6
|
|||
par__argfile_plus 3 12 4
|
||||
par__argfile_plus 3 12 5
|
||||
par__argfile_plus 3 12 6
|
||||
par__parset2 ### parset into array
|
||||
par__parset2 foo bar baz
|
||||
par__parset2 foo bar baz
|
||||
par__parset2 ### parset into vars with comma
|
||||
par__parset2 foo bar baz
|
||||
par__parset2 foo bar baz
|
||||
par__parset2 ### parset into vars with space
|
||||
par__parset2 foo bar baz
|
||||
par__parset2 foo bar baz
|
||||
par__parset2 ### parset with newlines
|
||||
par__parset2 1 1 2 1 2 3
|
||||
par__parset2 1
|
||||
par__parset2 1
|
||||
par__parset2 2
|
||||
par__parset2 1
|
||||
par__parset2 2
|
||||
par__parset2 3
|
||||
par__parset2 ### parset into indexed array vars
|
||||
par__parset2 foo bar baz
|
||||
par__parset2 foo bar baz
|
||||
par__parset2 foo bar bar
|
||||
par__parset2 foo bar bar
|
||||
par__parset2 ### env_parset
|
||||
par__parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz
|
||||
par__parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz
|
||||
par__parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz
|
||||
par__parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz
|
||||
par__parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz
|
||||
par__parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz
|
||||
par__parset2 newline1 newline2 1 newline1 newline2 1 2 newline1 newline2 1 2 3
|
||||
par__parset2 newline1
|
||||
par__parset2 newline2
|
||||
par__parset2 1
|
||||
par__parset2 newline1
|
||||
par__parset2 newline2
|
||||
par__parset2 1
|
||||
par__parset2 2
|
||||
par__parset2 newline1
|
||||
par__parset2 newline2
|
||||
par__parset2 1
|
||||
par__parset2 2
|
||||
par__parset2 3
|
||||
par__parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz
|
||||
par__parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz
|
||||
par__parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 bar
|
||||
par__parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 bar
|
||||
par__parset2 bug #52507: parset arr1 -v echo ::: fails
|
||||
par__parset2 seq 3
|
||||
par__parset2 1
|
||||
par__parset2 2
|
||||
par__parset2 3
|
||||
par__parset_assoc_arr bash@lo parset into an assoc array
|
||||
par__parset_assoc_arr bash@lo val 1 val 2 val 3
|
||||
par__parset_assoc_arr bash@lo val 1 val 2 val 3
|
||||
|
@ -630,7 +681,7 @@ par__test_cpu_detection_topology 1 4 8 4
|
|||
par__test_cpu_detection_topology 1-2-4-2 ThinkPad A475 AMD PRO A12-8830B R7 (64g)
|
||||
par__test_cpu_detection_topology 1 2 4 2
|
||||
par__test_cpu_detection_topology 1-16-24-16 8*2 thr + 8*1 thr Intel Core i7-13700HX (user submit)
|
||||
par__test_cpu_detection_topology 1 4 8 4
|
||||
par__test_cpu_detection_topology 1 2 4 2
|
||||
par_children_receive_sig ### Do children receive --termseq signals
|
||||
par_children_receive_sig parallel: Warning: This job was killed because it timed out:
|
||||
par_children_receive_sig parallel: Warning: show_signals ''
|
||||
|
@ -851,57 +902,6 @@ par_parset 9
|
|||
par_parset Commands with newline require -0
|
||||
par_parset line1
|
||||
par_parset line2
|
||||
par_parset2 ### parset into array
|
||||
par_parset2 foo bar baz
|
||||
par_parset2 foo bar baz
|
||||
par_parset2 ### parset into vars with comma
|
||||
par_parset2 foo bar baz
|
||||
par_parset2 foo bar baz
|
||||
par_parset2 ### parset into vars with space
|
||||
par_parset2 foo bar baz
|
||||
par_parset2 foo bar baz
|
||||
par_parset2 ### parset with newlines
|
||||
par_parset2 1 1 2 1 2 3
|
||||
par_parset2 1
|
||||
par_parset2 1
|
||||
par_parset2 2
|
||||
par_parset2 1
|
||||
par_parset2 2
|
||||
par_parset2 3
|
||||
par_parset2 ### parset into indexed array vars
|
||||
par_parset2 foo bar baz
|
||||
par_parset2 foo bar baz
|
||||
par_parset2 foo bar bar
|
||||
par_parset2 foo bar bar
|
||||
par_parset2 ### env_parset
|
||||
par_parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz
|
||||
par_parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz
|
||||
par_parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz
|
||||
par_parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz
|
||||
par_parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz
|
||||
par_parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz
|
||||
par_parset2 newline1 newline2 1 newline1 newline2 1 2 newline1 newline2 1 2 3
|
||||
par_parset2 newline1
|
||||
par_parset2 newline2
|
||||
par_parset2 1
|
||||
par_parset2 newline1
|
||||
par_parset2 newline2
|
||||
par_parset2 1
|
||||
par_parset2 2
|
||||
par_parset2 newline1
|
||||
par_parset2 newline2
|
||||
par_parset2 1
|
||||
par_parset2 2
|
||||
par_parset2 3
|
||||
par_parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz
|
||||
par_parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz
|
||||
par_parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 bar
|
||||
par_parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 bar
|
||||
par_parset2 bug #52507: parset arr1 -v echo ::: fails
|
||||
par_parset2 seq 3
|
||||
par_parset2 1
|
||||
par_parset2 2
|
||||
par_parset2 3
|
||||
par_pipe_regexp ### --pipe --regexp
|
||||
par_pipe_regexp Record
|
||||
par_pipe_regexp A2, Start, 5
|
||||
|
|
3
testsuite/wanted-results/parallel-local-leak
Normal file
3
testsuite/wanted-results/parallel-local-leak
Normal file
|
@ -0,0 +1,3 @@
|
|||
par__memory_leak ### Test for memory leaks
|
||||
par__memory_leak Of 300 runs of 1 job at least one should be bigger than a 3000 job run
|
||||
par__memory_leak Good: No memleak detected.
|
|
@ -2,18 +2,24 @@ CSV do_dburl CSV
|
|||
CSV par_append p_wrapper par_append $CSV
|
||||
CSV par_append Exit=0
|
||||
CSV par_append Exit=0
|
||||
CSV par_append Error:
|
||||
CSV par_append csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_append sql: Error: csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_append
|
||||
CSV par_append sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [command]
|
||||
CSV par_append Usage:
|
||||
CSV par_append sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [sqlcommand]
|
||||
CSV par_append sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl < sql_command_file
|
||||
CSV par_append
|
||||
CSV par_append See 'man sql' for the options
|
||||
CSV par_empty p_wrapper par_empty $CSV
|
||||
CSV par_empty Do nothing: TBL99999 does not exist because it is not created
|
||||
CSV par_empty Exit=0
|
||||
CSV par_empty Exit=0
|
||||
CSV par_empty Error:
|
||||
CSV par_empty csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_empty sql: Error: csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_empty
|
||||
CSV par_empty sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [command]
|
||||
CSV par_empty Usage:
|
||||
CSV par_empty sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [sqlcommand]
|
||||
CSV par_empty sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl < sql_command_file
|
||||
CSV par_empty
|
||||
CSV par_empty See 'man sql' for the options
|
||||
CSV par_no_table p_wrapper par_no_table $CSV
|
||||
CSV par_no_table bug #50018: --dburl without table dies
|
||||
CSV par_no_table 255
|
||||
|
@ -21,10 +27,13 @@ CSV par_no_table 255
|
|||
CSV par_no_table 255
|
||||
CSV par_no_table Exit=0
|
||||
CSV par_no_table Exit=0
|
||||
CSV par_no_table Error:
|
||||
CSV par_no_table csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_no_table sql: Error: csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_no_table
|
||||
CSV par_no_table sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [command]
|
||||
CSV par_no_table Usage:
|
||||
CSV par_no_table sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [sqlcommand]
|
||||
CSV par_no_table sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl < sql_command_file
|
||||
CSV par_no_table
|
||||
CSV par_no_table See 'man sql' for the options
|
||||
CSV par_no_table parallel: Error: The DBURL (csv:///%2Frun%2Fshm) must contain a table.
|
||||
CSV par_no_table parallel: Error: The DBURL (csv:///%2Frun%2Fshm) must contain a table.
|
||||
CSV par_no_table parallel: Error: The DBURL (csv:///%2Frun%2Fshm) must contain a table.
|
||||
|
@ -56,10 +65,13 @@ CSV par_shuf 5 d
|
|||
CSV par_shuf 5 e
|
||||
CSV par_shuf Exit=0
|
||||
CSV par_shuf Exit=0
|
||||
CSV par_shuf Error:
|
||||
CSV par_shuf csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_shuf sql: Error: csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_shuf
|
||||
CSV par_shuf sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [command]
|
||||
CSV par_shuf Usage:
|
||||
CSV par_shuf sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [sqlcommand]
|
||||
CSV par_shuf sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl < sql_command_file
|
||||
CSV par_shuf
|
||||
CSV par_shuf See 'man sql' for the options
|
||||
CSV par_sql_joblog p_wrapper par_sql_joblog $CSV
|
||||
CSV par_sql_joblog ### should only give a single --joblog heading
|
||||
CSV par_sql_joblog ### --sqlmaster/--sqlworker
|
||||
|
@ -168,73 +180,103 @@ CSV par_sql_joblog 24 : 999.999 999.999 0 0 0 0 sleep .3;echo 5 d
|
|||
CSV par_sql_joblog 25 : 999.999 999.999 0 0 0 0 sleep .3;echo 5 e
|
||||
CSV par_sql_joblog Exit=0
|
||||
CSV par_sql_joblog Exit=0
|
||||
CSV par_sql_joblog Error:
|
||||
CSV par_sql_joblog csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_sql_joblog sql: Error: csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_sql_joblog
|
||||
CSV par_sql_joblog sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [command]
|
||||
CSV par_sql_joblog Usage:
|
||||
CSV par_sql_joblog sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [sqlcommand]
|
||||
CSV par_sql_joblog sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl < sql_command_file
|
||||
CSV par_sql_joblog
|
||||
CSV par_sql_joblog See 'man sql' for the options
|
||||
CSV par_sqlandworker p_wrapper par_sqlandworker $CSV
|
||||
CSV par_sqlandworker Exit=0
|
||||
CSV par_sqlandworker Exit=0
|
||||
CSV par_sqlandworker Error:
|
||||
CSV par_sqlandworker csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_sqlandworker sql: Error: csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_sqlandworker
|
||||
CSV par_sqlandworker sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [command]
|
||||
CSV par_sqlandworker Usage:
|
||||
CSV par_sqlandworker sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [sqlcommand]
|
||||
CSV par_sqlandworker sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl < sql_command_file
|
||||
CSV par_sqlandworker
|
||||
CSV par_sqlandworker See 'man sql' for the options
|
||||
CSV par_sqlandworker_compress_linebuffer_tag p_wrapper par_sqlandworker_compress_linebuffer_tag $CSV
|
||||
CSV par_sqlandworker_compress_linebuffer_tag Exit=0
|
||||
CSV par_sqlandworker_compress_linebuffer_tag Exit=0
|
||||
CSV par_sqlandworker_compress_linebuffer_tag Error:
|
||||
CSV par_sqlandworker_compress_linebuffer_tag csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_sqlandworker_compress_linebuffer_tag sql: Error: csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_sqlandworker_compress_linebuffer_tag
|
||||
CSV par_sqlandworker_compress_linebuffer_tag sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [command]
|
||||
CSV par_sqlandworker_compress_linebuffer_tag Usage:
|
||||
CSV par_sqlandworker_compress_linebuffer_tag sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [sqlcommand]
|
||||
CSV par_sqlandworker_compress_linebuffer_tag sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl < sql_command_file
|
||||
CSV par_sqlandworker_compress_linebuffer_tag
|
||||
CSV par_sqlandworker_compress_linebuffer_tag See 'man sql' for the options
|
||||
CSV par_sqlandworker_linebuffer p_wrapper par_sqlandworker_linebuffer $CSV
|
||||
CSV par_sqlandworker_linebuffer Exit=0
|
||||
CSV par_sqlandworker_linebuffer Exit=0
|
||||
CSV par_sqlandworker_linebuffer Error:
|
||||
CSV par_sqlandworker_linebuffer csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_sqlandworker_linebuffer sql: Error: csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_sqlandworker_linebuffer
|
||||
CSV par_sqlandworker_linebuffer sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [command]
|
||||
CSV par_sqlandworker_linebuffer Usage:
|
||||
CSV par_sqlandworker_linebuffer sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [sqlcommand]
|
||||
CSV par_sqlandworker_linebuffer sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl < sql_command_file
|
||||
CSV par_sqlandworker_linebuffer
|
||||
CSV par_sqlandworker_linebuffer See 'man sql' for the options
|
||||
CSV par_sqlandworker_linebuffer_tag p_wrapper par_sqlandworker_linebuffer_tag $CSV
|
||||
CSV par_sqlandworker_linebuffer_tag Exit=0
|
||||
CSV par_sqlandworker_linebuffer_tag Exit=0
|
||||
CSV par_sqlandworker_linebuffer_tag Error:
|
||||
CSV par_sqlandworker_linebuffer_tag csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_sqlandworker_linebuffer_tag sql: Error: csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_sqlandworker_linebuffer_tag
|
||||
CSV par_sqlandworker_linebuffer_tag sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [command]
|
||||
CSV par_sqlandworker_linebuffer_tag Usage:
|
||||
CSV par_sqlandworker_linebuffer_tag sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [sqlcommand]
|
||||
CSV par_sqlandworker_linebuffer_tag sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl < sql_command_file
|
||||
CSV par_sqlandworker_linebuffer_tag
|
||||
CSV par_sqlandworker_linebuffer_tag See 'man sql' for the options
|
||||
CSV par_sqlandworker_lo p_wrapper par_sqlandworker_lo $CSV
|
||||
CSV par_sqlandworker_lo Exit=0
|
||||
CSV par_sqlandworker_lo Exit=0
|
||||
CSV par_sqlandworker_lo Error:
|
||||
CSV par_sqlandworker_lo csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_sqlandworker_lo sql: Error: csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_sqlandworker_lo
|
||||
CSV par_sqlandworker_lo sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [command]
|
||||
CSV par_sqlandworker_lo Usage:
|
||||
CSV par_sqlandworker_lo sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [sqlcommand]
|
||||
CSV par_sqlandworker_lo sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl < sql_command_file
|
||||
CSV par_sqlandworker_lo
|
||||
CSV par_sqlandworker_lo See 'man sql' for the options
|
||||
CSV par_sqlandworker_results p_wrapper par_sqlandworker_results $CSV
|
||||
CSV par_sqlandworker_results Exit=0
|
||||
CSV par_sqlandworker_results Exit=0
|
||||
CSV par_sqlandworker_results Error:
|
||||
CSV par_sqlandworker_results csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_sqlandworker_results sql: Error: csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_sqlandworker_results
|
||||
CSV par_sqlandworker_results sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [command]
|
||||
CSV par_sqlandworker_results Usage:
|
||||
CSV par_sqlandworker_results sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [sqlcommand]
|
||||
CSV par_sqlandworker_results sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl < sql_command_file
|
||||
CSV par_sqlandworker_results
|
||||
CSV par_sqlandworker_results See 'man sql' for the options
|
||||
CSV par_sqlandworker_tag p_wrapper par_sqlandworker_tag $CSV
|
||||
CSV par_sqlandworker_tag Exit=0
|
||||
CSV par_sqlandworker_tag Exit=0
|
||||
CSV par_sqlandworker_tag Error:
|
||||
CSV par_sqlandworker_tag csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_sqlandworker_tag sql: Error: csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_sqlandworker_tag
|
||||
CSV par_sqlandworker_tag sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [command]
|
||||
CSV par_sqlandworker_tag Usage:
|
||||
CSV par_sqlandworker_tag sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [sqlcommand]
|
||||
CSV par_sqlandworker_tag sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl < sql_command_file
|
||||
CSV par_sqlandworker_tag
|
||||
CSV par_sqlandworker_tag See 'man sql' for the options
|
||||
CSV par_sqlandworker_total_jobs p_wrapper par_sqlandworker_total_jobs $CSV
|
||||
CSV par_sqlandworker_total_jobs Exit=0
|
||||
CSV par_sqlandworker_total_jobs Exit=0
|
||||
CSV par_sqlandworker_total_jobs Error:
|
||||
CSV par_sqlandworker_total_jobs csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_sqlandworker_total_jobs sql: Error: csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_sqlandworker_total_jobs
|
||||
CSV par_sqlandworker_total_jobs sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [command]
|
||||
CSV par_sqlandworker_total_jobs Usage:
|
||||
CSV par_sqlandworker_total_jobs sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [sqlcommand]
|
||||
CSV par_sqlandworker_total_jobs sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl < sql_command_file
|
||||
CSV par_sqlandworker_total_jobs
|
||||
CSV par_sqlandworker_total_jobs See 'man sql' for the options
|
||||
CSV par_sqlandworker_unbuffer p_wrapper par_sqlandworker_unbuffer $CSV
|
||||
CSV par_sqlandworker_unbuffer Exit=0
|
||||
CSV par_sqlandworker_unbuffer Exit=0
|
||||
CSV par_sqlandworker_unbuffer Error:
|
||||
CSV par_sqlandworker_unbuffer csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_sqlandworker_unbuffer sql: Error: csv:///%2Frun%2Fshm is not a valid DBURL
|
||||
CSV par_sqlandworker_unbuffer
|
||||
CSV par_sqlandworker_unbuffer sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [command]
|
||||
CSV par_sqlandworker_unbuffer Usage:
|
||||
CSV par_sqlandworker_unbuffer sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [sqlcommand]
|
||||
CSV par_sqlandworker_unbuffer sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl < sql_command_file
|
||||
CSV par_sqlandworker_unbuffer
|
||||
CSV par_sqlandworker_unbuffer See 'man sql' for the options
|
||||
INFLUX do_dburl INFLUX
|
||||
INFLUX par_append p_wrapper par_append $INFLUX
|
||||
INFLUX par_append Exit=255
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
par_few_duplicate_run $CSV par_few_duplicate_run $CSV
|
||||
par_few_duplicate_run $CSV ### With many workers there will be some duplicates
|
||||
par_few_duplicate_run $CSV Error:
|
||||
par_few_duplicate_run $CSV csv:///%2Frun%2Fshm%2Fcsv is not a valid DBURL
|
||||
par_few_duplicate_run $CSV sql: Error: csv:///%2Frun%2Fshm%2Fcsv is not a valid DBURL
|
||||
par_few_duplicate_run $CSV
|
||||
par_few_duplicate_run $CSV sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [command]
|
||||
par_few_duplicate_run $CSV Usage:
|
||||
par_few_duplicate_run $CSV sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [sqlcommand]
|
||||
par_few_duplicate_run $CSV sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl < sql_command_file
|
||||
par_few_duplicate_run $CSV
|
||||
par_few_duplicate_run $CSV See 'man sql' for the options
|
||||
par_few_duplicate_run $CSV OK
|
||||
par_few_duplicate_run $MYSQL par_few_duplicate_run $MYSQL
|
||||
par_few_duplicate_run $MYSQL ### With many workers there will be some duplicates
|
||||
|
|
|
@ -75,15 +75,17 @@ par__sshpass_with_password parallel: Warning: Using password or SSHPASS with --(
|
|||
par__sshpass_with_password parallel: Warning: on the command line, making it visible to local users via `ps`.
|
||||
par__sshpass_with_password OK
|
||||
par__sshpass_with_password ### Crazy passwords: `date>>/tmp/trap`;(|<*&)'
|
||||
par__sshpass_with_password # These fail. The important part is that /tmp/trap is empty
|
||||
par__sshpass_with_password parallel: Warning: Using password or SSHPASS with --(n)onall exposes the password
|
||||
par__sshpass_with_password parallel: Warning: on the command line, making it visible to local users via `ps`.
|
||||
par__sshpass_with_password ssh: Could not resolve hostname host:
|
||||
par__sshpass_with_password Permission denied, please try again.
|
||||
par__sshpass_with_password
|
||||
par__sshpass_with_password parallel: Warning: Using password or SSHPASS with --(n)onall exposes the password
|
||||
par__sshpass_with_password parallel: Warning: on the command line, making it visible to local users via `ps`.
|
||||
par__sshpass_with_password ssh: Could not resolve hostname host:
|
||||
par__sshpass_with_password Permission denied, please try again.
|
||||
par__sshpass_with_password
|
||||
par__sshpass_with_password This must stay empty:
|
||||
par__sshpass_with_password OK
|
||||
par_csh_variable_newline ### Can csh propagate a variable containing \n
|
||||
par_csh_variable_newline 1
|
||||
par_csh_variable_newline 2
|
||||
|
|
|
@ -160,7 +160,8 @@ par_--nonall_results /TMP/nonall/slash/sh@lo/1
|
|||
par_--nonall_results /TMP/nonall/slash/sh@lo/1/seq
|
||||
par_--nonall_results /TMP/nonall/slash/sh@lo/1/stderr
|
||||
par_--nonall_results /TMP/nonall/slash/sh@lo/1/stdout
|
||||
par_--tmux_length ### works
|
||||
par_--tmux_length ### tmux examples that earlier blocked
|
||||
par_--tmux_length Runtime 14 seconds on non-loaded machine
|
||||
par_--tmux_length See output with: tmux -S /TMP/tmsXXXXX attach
|
||||
par_--tmux_length See output with: tmux -S /TMP/tmsXXXXX attach
|
||||
par_--tmux_length ### These blocked due to length
|
||||
|
|
|
@ -69,43 +69,6 @@ par_--env_underscore_dash /bin/dash: 1: myecho: not found
|
|||
par_--env_underscore_dash OK if no myecho ^^^^^^^^^^^^^^^^^
|
||||
par_--env_underscore_dash script: 2: myecho: not found
|
||||
par_--env_underscore_dash OK if no myecho ^^^^^^^^^^^^^^^^^
|
||||
par_--env_underscore_fish ### fish
|
||||
par_--env_underscore_fish Fish is broken
|
||||
par_--env_underscore_fish ### Testing of --env _
|
||||
par_--env_underscore_fish Test copying
|
||||
par_--env_underscore_fish variables in aliases and arrays in functions work
|
||||
par_--env_underscore_fish variables in aliases and arrays in functions work
|
||||
par_--env_underscore_fish variables in aliases and arrays in functions work
|
||||
par_--env_underscore_fish variables in aliases and arrays in functions work
|
||||
par_--env_underscore_fish variables in aliases and arrays in functions work
|
||||
par_--env_underscore_fish variables in aliases and arrays in functions work
|
||||
par_--env_underscore_fish Test ignoring
|
||||
par_--env_underscore_fish script (line 99):
|
||||
par_--env_underscore_fish not_copied_alias 'error=OK'
|
||||
par_--env_underscore_fish script (line 99):
|
||||
par_--env_underscore_fish not_copied_func 'error=OK'
|
||||
par_--env_underscore_fish error=OK
|
||||
par_--env_underscore_fish error=OK
|
||||
par_--env_underscore_fish Test single ignoring
|
||||
par_--env_underscore_fish aliases and arrays in functions work
|
||||
par_--env_underscore_fish aliases and arrays in functions work
|
||||
par_--env_underscore_fish aliases functions work
|
||||
par_--env_underscore_fish aliases functions work
|
||||
par_--env_underscore_fish myecho $myarray functions $argv
|
||||
par_--env_underscore_fish
|
||||
par_--env_underscore_fish in function 'myfunc' with arguments 'work'
|
||||
par_--env_underscore_fish OK if ^^^^^^^^^^^^^^^^^ no myecho
|
||||
par_--env_underscore_fish script (line 4):
|
||||
par_--env_underscore_fish myecho $myarray functions $argv
|
||||
par_--env_underscore_fish
|
||||
par_--env_underscore_fish in function 'myfunc' with arguments 'work'
|
||||
par_--env_underscore_fish called on line 99 of file script
|
||||
par_--env_underscore_fish OK if ^^^^^^^^^^^^^^^^^ no myecho
|
||||
par_--env_underscore_fish myfunc work
|
||||
par_--env_underscore_fish OK if ^^^^^^^^^^^^^^^^^ no myfunc
|
||||
par_--env_underscore_fish script (line 6):
|
||||
par_--env_underscore_fish myfunc work
|
||||
par_--env_underscore_fish OK if ^^^^^^^^^^^^^^^^^ no myfunc
|
||||
par_--env_underscore_ksh ### ksh
|
||||
par_--env_underscore_ksh ### Testing of --env _
|
||||
par_--env_underscore_ksh variables in aliases in and arrays in functions work
|
||||
|
@ -425,56 +388,6 @@ par__man_dash variables with = & " ! ' work
|
|||
par__man_dash exit value 2 should be 2
|
||||
par__man_dash Unknown option: no-such-option
|
||||
par__man_dash exit value 255 should be 255
|
||||
par__man_fish ### fish
|
||||
par__man_fish ### From man env_parallel
|
||||
par__man_fish aliases with = & " ! ' work
|
||||
par__man_fish aliases with = & " ! ' work
|
||||
par__man_fish aliases with = & " ! ' work
|
||||
par__man_fish aliases with = & " ! ' work
|
||||
par__man_fish aliases with = & " ! ' work
|
||||
par__man_fish functions with = & " ! ' work
|
||||
par__man_fish functions with = & " ! ' work
|
||||
par__man_fish functions with = & " ! ' work
|
||||
par__man_fish functions with = & " ! ' work
|
||||
par__man_fish functions with = & " ! ' work
|
||||
par__man_fish variables with = & " ! ' work
|
||||
par__man_fish variables with = & " ! ' work
|
||||
par__man_fish variables with = & " ! ' work
|
||||
par__man_fish variables with = & " ! ' work
|
||||
par__man_fish variables with = & " ! ' work
|
||||
par__man_fish multiline
|
||||
par__man_fish variables with = & " ! ' work
|
||||
par__man_fish multiline
|
||||
par__man_fish variables with = & " ! ' work
|
||||
par__man_fish multiline
|
||||
par__man_fish variables with = & " ! ' work
|
||||
par__man_fish multiline
|
||||
par__man_fish variables with = & " ! ' work
|
||||
par__man_fish multiline
|
||||
par__man_fish variables with = & " ! ' work
|
||||
par__man_fish arrays with = & " ! ' work, too
|
||||
par__man_fish
|
||||
par__man_fish work,
|
||||
par__man_fish too
|
||||
par__man_fish
|
||||
par__man_fish arrays
|
||||
par__man_fish with = & " ! '
|
||||
par__man_fish work,
|
||||
par__man_fish too
|
||||
par__man_fish arrays
|
||||
par__man_fish with = & " ! '
|
||||
par__man_fish work,
|
||||
par__man_fish too
|
||||
par__man_fish arrays
|
||||
par__man_fish with = & " ! '
|
||||
par__man_fish work,
|
||||
par__man_fish too
|
||||
par__man_fish multi
|
||||
par__man_fish level
|
||||
par__man_fish env_parallel
|
||||
par__man_fish exit value 2 should be 2
|
||||
par__man_fish Unknown option: no-such-option
|
||||
par__man_fish exit value 255 should be 255 `sleep 1`
|
||||
par__man_ksh ### ksh
|
||||
par__man_ksh ### From man env_parallel
|
||||
par__man_ksh aliases with = & " ! ' work
|
||||
|
@ -1104,35 +1017,6 @@ par_env_parallel_--session_dash after aliasafter_OK
|
|||
par_env_parallel_--session_dash after aliasafter_OK
|
||||
par_env_parallel_--session_dash after varafter_OK
|
||||
par_env_parallel_--session_dash after varafter_OK
|
||||
par_env_parallel_--session_fish ### Test env_parallel --session
|
||||
par_env_parallel_--session_fish fish: Unknown command: aliasbefore
|
||||
par_env_parallel_--session_fish fish:
|
||||
par_env_parallel_--session_fish aliasbefore must_fail
|
||||
par_env_parallel_--session_fish
|
||||
par_env_parallel_--session_fish fish: Unknown command: aliasbefore
|
||||
par_env_parallel_--session_fish script (line 6):
|
||||
par_env_parallel_--session_fish aliasbefore must_fail
|
||||
par_env_parallel_--session_fish
|
||||
par_env_parallel_--session_fish fish: Unknown command: funcbefore
|
||||
par_env_parallel_--session_fish fish:
|
||||
par_env_parallel_--session_fish funcbefore must_fail
|
||||
par_env_parallel_--session_fish
|
||||
par_env_parallel_--session_fish fish: Unknown command: funcbefore
|
||||
par_env_parallel_--session_fish script (line 6):
|
||||
par_env_parallel_--session_fish funcbefore must_fail
|
||||
par_env_parallel_--session_fish
|
||||
par_env_parallel_--session_fish no_before
|
||||
par_env_parallel_--session_fish no_before
|
||||
par_env_parallel_--session_fish no_before
|
||||
par_env_parallel_--session_fish no_before
|
||||
par_env_parallel_--session_fish after aliasafter_OK
|
||||
par_env_parallel_--session_fish after aliasafter_OK
|
||||
par_env_parallel_--session_fish after funcafter_OK
|
||||
par_env_parallel_--session_fish after funcafter_OK
|
||||
par_env_parallel_--session_fish after varafter_OK
|
||||
par_env_parallel_--session_fish after varafter_OK
|
||||
par_env_parallel_--session_fish array after arrayafter_OK
|
||||
par_env_parallel_--session_fish array after arrayafter_OK
|
||||
par_env_parallel_--session_ksh ### Test env_parallel --session
|
||||
par_env_parallel_--session_ksh ### level0 should be hidden, level1 should be transferred
|
||||
par_env_parallel_--session_ksh
|
||||
|
@ -1631,17 +1515,6 @@ par_env_parallel_dash bug #50435: Remote fifo broke in 20150522
|
|||
par_env_parallel_dash bug #52534: Tail of multiline alias is ignored
|
||||
par_env_parallel_dash data from stdin
|
||||
par_env_parallel_dash data from stdin
|
||||
par_env_parallel_fish bug #50435: Remote fifo broke in 20150522
|
||||
par_env_parallel_fish data from stdin
|
||||
par_env_parallel_fish OK
|
||||
par_env_parallel_fish data from stdin
|
||||
par_env_parallel_fish OK
|
||||
par_env_parallel_fish OK: 0==0
|
||||
par_env_parallel_fish ### Test failing command with --cat
|
||||
par_env_parallel_fish data from stdin
|
||||
par_env_parallel_fish OK: 1==1
|
||||
par_env_parallel_fish data from stdin
|
||||
par_env_parallel_fish OK: 1==1
|
||||
par_env_parallel_ksh OK
|
||||
par_env_parallel_ksh OK
|
||||
par_env_parallel_ksh alias line 1
|
||||
|
@ -1754,7 +1627,6 @@ par_environment_too_big_bash parallel: Error: Command line too long (999 >= 999)
|
|||
par_environment_too_big_bash parallel: Error: Command line too long (999 >= 999) at input 0: fail_bigfunc_quote_remote
|
||||
par_environment_too_big_csh Not implemented
|
||||
par_environment_too_big_dash moved to hwdep1.sh
|
||||
par_environment_too_big_fish Not implemented
|
||||
par_environment_too_big_ksh bug #50815: env_parallel should warn if the environment is too big
|
||||
par_environment_too_big_ksh OK_bigvar
|
||||
par_environment_too_big_ksh OK_bigvar_remote
|
||||
|
@ -1855,38 +1727,6 @@ par_funky_dash ' '
|
|||
par_funky_dash '
par_funky_dash !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€<7F>‚ƒ„…†‡ˆ‰Š‹Œ<E280B9>Ž<EFBFBD><C5BD>‘’“”•–—˜™š›œ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
|
||||
par_funky_dash 3 arg alias_works
|
||||
par_funky_dash 3 arg alias_works_over_ssh
|
||||
par_funky_fish env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
par_funky_fish 3 arg alias_works
|
||||
par_funky_fish env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
par_funky_fish function_works
|
||||
par_funky_fish myvar works
|
||||
par_funky_fish myenvvar works
|
||||
par_funky_fish space 6
|
||||
par_funky_fish
|
||||
par_funky_fish
|
||||
par_funky_fish
|
||||
par_funky_fish Funky-
par_funky_fish !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
|
||||
par_funky_fish Funkyenv-
par_funky_fish !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funkyenv
|
||||
par_funky_fish
|
||||
par_funky_fish
|
||||
par_funky_fish
|
||||
par_funky_fish env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
par_funky_fish 3 arg alias_works_over_ssh
|
||||
par_funky_fish env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
par_funky_fish function_works_over_ssh
|
||||
par_funky_fish myvar works
|
||||
par_funky_fish myenvvar works
|
||||
par_funky_fish space 6
|
||||
par_funky_fish
|
||||
par_funky_fish
|
||||
par_funky_fish
|
||||
par_funky_fish Funky-
par_funky_fish !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
|
||||
par_funky_fish Funkyenv-
par_funky_fish !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funkyenv
|
||||
par_funky_fish
|
||||
par_funky_fish
|
||||
par_funky_fish
|
||||
par_funky_fish
|
||||
par_funky_fish '
par_funky_fish !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>'
|
||||
par_funky_ksh
|
||||
par_funky_ksh
par_funky_ksh !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€<7F>‚ƒ„…†‡ˆ‰Š‹Œ<E280B9>Ž<EFBFBD><C5BD>‘’“”•–—˜™š›œ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ-funky
|
||||
par_funky_ksh
par_funky_ksh !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€<7F>‚ƒ„…†‡ˆ‰Š‹Œ<E280B9>Ž<EFBFBD><C5BD>‘’“”•–—˜™š›œ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ-funky
|
||||
|
@ -2051,7 +1891,6 @@ par_parset_dash 2
|
|||
par_parset_dash 3
|
||||
par_parset_dash Exit value 2 = 2
|
||||
par_parset_dash Exit value 2 = 2
|
||||
par_parset_fish Not implemented
|
||||
par_parset_ksh parset
|
||||
par_parset_ksh ### parset into array
|
||||
par_parset_ksh foo bar baz
|
||||
|
@ -2213,3 +2052,160 @@ par_parset_zsh myecho myvar myarr 0 myfun foo myecho myvar myarr 0 myfun ba
|
|||
par_parset_zsh myecho myvar myarr 0 myfun foo myecho myvar myarr 0 myfun bar myecho myvar myarr 0 myfun baz
|
||||
par_parset_zsh Exit value 2 = 2
|
||||
par_parset_zsh Exit value 2 = 2
|
||||
par_--env_underscore_fish ### fish
|
||||
par_--env_underscore_fish Fish is broken
|
||||
par_--env_underscore_fish ### Testing of --env _
|
||||
par_--env_underscore_fish Test copying
|
||||
par_--env_underscore_fish *** Moved to parallel-ssh-fish.sh ***
|
||||
par_--env_underscore_fish Test ignoring
|
||||
par_--env_underscore_fish script (line 99):
|
||||
par_--env_underscore_fish not_copied_alias 'error=OK'
|
||||
par_--env_underscore_fish script (line 99):
|
||||
par_--env_underscore_fish not_copied_func 'error=OK'
|
||||
par_--env_underscore_fish error=OK
|
||||
par_--env_underscore_fish error=OK
|
||||
par_--env_underscore_fish Test single ignoring
|
||||
par_--env_underscore_fish aliases and arrays in functions work
|
||||
par_--env_underscore_fish aliases and arrays in functions work
|
||||
par_--env_underscore_fish aliases functions work
|
||||
par_--env_underscore_fish aliases functions work
|
||||
par_--env_underscore_fish myecho $myarray functions $argv
|
||||
par_--env_underscore_fish
|
||||
par_--env_underscore_fish in function 'myfunc' with arguments 'work'
|
||||
par_--env_underscore_fish OK if ^^^^^^^^^^^^^^^^^ no myecho
|
||||
par_--env_underscore_fish script (line 4):
|
||||
par_--env_underscore_fish myecho $myarray functions $argv
|
||||
par_--env_underscore_fish
|
||||
par_--env_underscore_fish in function 'myfunc' with arguments 'work'
|
||||
par_--env_underscore_fish called on line 99 of file script
|
||||
par_--env_underscore_fish OK if ^^^^^^^^^^^^^^^^^ no myecho
|
||||
par_--env_underscore_fish myfunc work
|
||||
par_--env_underscore_fish OK if ^^^^^^^^^^^^^^^^^ no myfunc
|
||||
par_--env_underscore_fish script (line 6):
|
||||
par_--env_underscore_fish myfunc work
|
||||
par_--env_underscore_fish OK if ^^^^^^^^^^^^^^^^^ no myfunc
|
||||
par__man_fish ### fish
|
||||
par__man_fish ### From man env_parallel
|
||||
par__man_fish aliases with = & " ! ' work
|
||||
par__man_fish aliases with = & " ! ' work
|
||||
par__man_fish aliases with = & " ! ' work
|
||||
par__man_fish aliases with = & " ! ' work
|
||||
par__man_fish aliases with = & " ! ' work
|
||||
par__man_fish functions with = & " ! ' work
|
||||
par__man_fish functions with = & " ! ' work
|
||||
par__man_fish functions with = & " ! ' work
|
||||
par__man_fish functions with = & " ! ' work
|
||||
par__man_fish functions with = & " ! ' work
|
||||
par__man_fish variables with = & " ! ' work
|
||||
par__man_fish variables with = & " ! ' work
|
||||
par__man_fish variables with = & " ! ' work
|
||||
par__man_fish variables with = & " ! ' work
|
||||
par__man_fish variables with = & " ! ' work
|
||||
par__man_fish multiline
|
||||
par__man_fish variables with = & " ! ' work
|
||||
par__man_fish multiline
|
||||
par__man_fish variables with = & " ! ' work
|
||||
par__man_fish multiline
|
||||
par__man_fish variables with = & " ! ' work
|
||||
par__man_fish multiline
|
||||
par__man_fish variables with = & " ! ' work
|
||||
par__man_fish multiline
|
||||
par__man_fish variables with = & " ! ' work
|
||||
par__man_fish arrays with = & " ! ' work, too
|
||||
par__man_fish # these 4 fail often. Race condition?
|
||||
par__man_fish arrays
|
||||
par__man_fish with = & " ! '
|
||||
par__man_fish work,
|
||||
par__man_fish too
|
||||
par__man_fish arrays
|
||||
par__man_fish with = & " ! '
|
||||
par__man_fish work,
|
||||
par__man_fish too
|
||||
par__man_fish arrays
|
||||
par__man_fish with = & " ! '
|
||||
par__man_fish work,
|
||||
par__man_fish too
|
||||
par__man_fish arrays
|
||||
par__man_fish with = & " ! '
|
||||
par__man_fish work,
|
||||
par__man_fish too
|
||||
par__man_fish multi
|
||||
par__man_fish level
|
||||
par__man_fish env_parallel
|
||||
par__man_fish exit value 2 should be 2
|
||||
par__man_fish Unknown option: no-such-option
|
||||
par__man_fish exit value 255 should be 255 `sleep 1`
|
||||
par_env_parallel_--session_fish ### Test env_parallel --session
|
||||
par_env_parallel_--session_fish fish: Unknown command: aliasbefore
|
||||
par_env_parallel_--session_fish fish:
|
||||
par_env_parallel_--session_fish aliasbefore must_fail
|
||||
par_env_parallel_--session_fish
|
||||
par_env_parallel_--session_fish fish: Unknown command: aliasbefore
|
||||
par_env_parallel_--session_fish script (line 6):
|
||||
par_env_parallel_--session_fish aliasbefore must_fail
|
||||
par_env_parallel_--session_fish
|
||||
par_env_parallel_--session_fish fish: Unknown command: funcbefore
|
||||
par_env_parallel_--session_fish fish:
|
||||
par_env_parallel_--session_fish funcbefore must_fail
|
||||
par_env_parallel_--session_fish
|
||||
par_env_parallel_--session_fish fish: Unknown command: funcbefore
|
||||
par_env_parallel_--session_fish script (line 6):
|
||||
par_env_parallel_--session_fish funcbefore must_fail
|
||||
par_env_parallel_--session_fish
|
||||
par_env_parallel_--session_fish no_before
|
||||
par_env_parallel_--session_fish no_before
|
||||
par_env_parallel_--session_fish no_before
|
||||
par_env_parallel_--session_fish no_before
|
||||
par_env_parallel_--session_fish after aliasafter_OK
|
||||
par_env_parallel_--session_fish after aliasafter_OK
|
||||
par_env_parallel_--session_fish after funcafter_OK
|
||||
par_env_parallel_--session_fish after funcafter_OK
|
||||
par_env_parallel_--session_fish after varafter_OK
|
||||
par_env_parallel_--session_fish after varafter_OK
|
||||
par_env_parallel_--session_fish array after arrayafter_OK
|
||||
par_env_parallel_--session_fish array after arrayafter_OK
|
||||
par_env_parallel_fish bug #50435: Remote fifo broke in 20150522
|
||||
par_env_parallel_fish data from stdin
|
||||
par_env_parallel_fish OK
|
||||
par_env_parallel_fish data from stdin
|
||||
par_env_parallel_fish OK
|
||||
par_env_parallel_fish OK: 0==0
|
||||
par_env_parallel_fish ### Test failing command with --cat
|
||||
par_env_parallel_fish data from stdin
|
||||
par_env_parallel_fish OK: 1==1
|
||||
par_env_parallel_fish data from stdin
|
||||
par_env_parallel_fish OK: 1==1
|
||||
par_environment_too_big_fish Not implemented
|
||||
par_funky_fish env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
par_funky_fish 3 arg alias_works
|
||||
par_funky_fish env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
par_funky_fish function_works
|
||||
par_funky_fish myvar works
|
||||
par_funky_fish myenvvar works
|
||||
par_funky_fish space 6
|
||||
par_funky_fish
|
||||
par_funky_fish
|
||||
par_funky_fish
|
||||
par_funky_fish Funky-
par_funky_fish !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
|
||||
par_funky_fish Funkyenv-
par_funky_fish !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funkyenv
|
||||
par_funky_fish
|
||||
par_funky_fish
|
||||
par_funky_fish
|
||||
par_funky_fish env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
par_funky_fish 3 arg alias_works_over_ssh
|
||||
par_funky_fish env_parallel: Warning: ASCII value 1 in variables is not supported
|
||||
par_funky_fish function_works_over_ssh
|
||||
par_funky_fish myvar works
|
||||
par_funky_fish myenvvar works
|
||||
par_funky_fish space 6
|
||||
par_funky_fish
|
||||
par_funky_fish
|
||||
par_funky_fish
|
||||
par_funky_fish Funky-
par_funky_fish !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funky
|
||||
par_funky_fish Funkyenv-
par_funky_fish !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>-funkyenv
|
||||
par_funky_fish
|
||||
par_funky_fish
|
||||
par_funky_fish
|
||||
par_funky_fish
|
||||
par_funky_fish '
par_funky_fish !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>'
|
||||
par_parset_fish Not implemented
|
||||
|
|
|
@ -34,7 +34,8 @@ par_path_remote_csh StArT
|
|||
par_path_remote_csh CSH Path before: /bin:/usr/bin with no parallel
|
||||
par_path_remote_csh parallel: Command not found.
|
||||
par_path_remote_csh ^^^^^^^^ Not found is OK
|
||||
par_path_remote_csh /bin:/usr/bin:/tmp OK
|
||||
par_path_remote_csh parallel: Warning: Could not figure out number of cpus on lo (). Using 1.
|
||||
par_path_remote_csh OK: /bin:/usr/bin:/tmp
|
||||
par_path_remote_csh Done
|
||||
par_retries_1 ### Test of --retries - it should run 13 jobs in total
|
||||
par_retries_1 OK
|
||||
|
|
|
@ -976,9 +976,11 @@ foo quuz
|
|||
bar baz
|
||||
bar quuz
|
||||
sql $DBURL 'SELECT * FROM mytable ORDER BY Seq;'
|
||||
Error:
|
||||
SELECT * FROM mytable ORDER BY Seq; is not a valid DBURL
|
||||
sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [command]
|
||||
sql: Error: SELECT * FROM mytable ORDER BY Seq; is not a valid DBURL
|
||||
Usage:
|
||||
sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [sqlcommand]
|
||||
sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl < sql_command_file
|
||||
See 'man sql' for the options
|
||||
parallel --sqlmaster $DBURLTABLE echo ::: foo bar ::: baz quuz
|
||||
parallel: Error: echo is not a valid DBURL
|
||||
parallel --sqlworker $DBURLTABLE echo ::: foo bar ::: baz quuz
|
||||
|
|
|
@ -1,78 +1,78 @@
|
|||
par_--debug ### Test --debug
|
||||
par_--debug dburl mysql://tange:tange@/
|
||||
par_--debug databasedriver mysql user tange password tange host port database tange query
|
||||
par_--debug [ | ((sleep 1; rm /TMP/tmpfile') & mysql --defaults-extra-file=/TMP/tmpfile' --user=tange tange)]
|
||||
par_--debug Test if --debug works
|
||||
par_--debug Yes it does
|
||||
par_--help ### Test --help -h
|
||||
par_--help Usage:
|
||||
par_--help sql [options] dburl [sqlcommand]
|
||||
par_--help sql [options] dburl < sql_command_file
|
||||
par_--help
|
||||
par_--help See 'man sql' for the options
|
||||
par_--help Usage:
|
||||
par_--help sql [options] dburl [sqlcommand]
|
||||
par_--help sql [options] dburl < sql_command_file
|
||||
par_--help
|
||||
par_--help See 'man sql' for the options
|
||||
par_--html ### Test --html
|
||||
par_--html <TABLE BORDER=1><TR><TH>id</TH><TH>data</TH></TR><TR><TD>1</TD><TD>abc</TD></TR><TR><TD>3</TD><TD>def</TD></TR></TABLE>
|
||||
par_--passthrough ### Test --passthrough -p
|
||||
par_--passthrough <TABLE BORDER=1><TR><TH>id</TH><TH>data</TH></TR><TR><TD>1</TD><TD>abc</TD></TR><TR><TD>3</TD><TD>def</TD></TR></TABLE>
|
||||
par_--passthrough <TABLE BORDER=1><TR><TH>id</TH><TH>data</TH></TR><TR><TD>1</TD><TD>abc</TD></TR><TR><TD>3</TD><TD>def</TD></TR></TABLE>
|
||||
par_--retries ### Test --retries=s
|
||||
par_--retries dburl pg://nongood@127.0.0.3:2227/
|
||||
par_--retries databasedriver pg user nongood password host 127.0.0.3 port 2227 database nongood query
|
||||
par_--retries [ | psql -h 127.0.0.3 -U nongood -p 2227 -d nongood]
|
||||
par_--retries psql: error: connection to server at "127.0.0.3", port 2227 failed: Connection refused
|
||||
par_--retries Is the server running on that host and accepting TCP/IP connections?
|
||||
par_--retries [ | psql -h 127.0.0.3 -U nongood -p 2227 -d nongood]
|
||||
par_--retries psql: error: connection to server at "127.0.0.3", port 2227 failed: Connection refused
|
||||
par_--retries Is the server running on that host and accepting TCP/IP connections?
|
||||
par_--retries [ | psql -h 127.0.0.3 -U nongood -p 2227 -d nongood]
|
||||
par_--retries psql: error: connection to server at "127.0.0.3", port 2227 failed: Connection refused
|
||||
par_--retries Is the server running on that host and accepting TCP/IP connections?
|
||||
par_--retries [ | psql -h 127.0.0.3 -U nongood -p 2227 -d nongood]
|
||||
par_--retries psql: error: connection to server at "127.0.0.3", port 2227 failed: Connection refused
|
||||
par_--retries Is the server running on that host and accepting TCP/IP connections?
|
||||
par_--sep ### Test --sep -s
|
||||
par_--sep 2 1
|
||||
par_--sep 2 1
|
||||
par_-_version ### Test --version -V
|
||||
par_-_version 13 74 535
|
||||
par_-_version 13 74 535
|
||||
par_-r ### Test -r - retry 3 times
|
||||
par_-r dburl pg://nongood@127.0.0.3:2227/
|
||||
par_-r databasedriver pg user nongood password host 127.0.0.3 port 2227 database nongood query
|
||||
par_-r [ | psql -h 127.0.0.3 -U nongood -p 2227 -d nongood]
|
||||
par_-r psql: error: connection to server at "127.0.0.3", port 2227 failed: Connection refused
|
||||
par_-r Is the server running on that host and accepting TCP/IP connections?
|
||||
par_-r [ | psql -h 127.0.0.3 -U nongood -p 2227 -d nongood]
|
||||
par_-r psql: error: connection to server at "127.0.0.3", port 2227 failed: Connection refused
|
||||
par_-r Is the server running on that host and accepting TCP/IP connections?
|
||||
par_-r [ | psql -h 127.0.0.3 -U nongood -p 2227 -d nongood]
|
||||
par_-r psql: error: connection to server at "127.0.0.3", port 2227 failed: Connection refused
|
||||
par_-r Is the server running on that host and accepting TCP/IP connections?
|
||||
par_dbsize ### Test --db-size --dbsize
|
||||
par_dbsize 6
|
||||
par_dbsize 6
|
||||
par__dbsize ### Test --db-size --dbsize
|
||||
par__dbsize 6
|
||||
par__dbsize 6
|
||||
par__listproc ### Test --show-processlist|proclist|listproc
|
||||
par__listproc 2 17
|
||||
par__listproc 2 17
|
||||
par__listproc 2 17
|
||||
par__noheaders ### Test --noheaders --no-headers -n
|
||||
par__noheaders abc 1
|
||||
par__noheaders def 3
|
||||
par__noheaders abc 1
|
||||
par__noheaders def 3
|
||||
par__noheaders abc 1
|
||||
par__noheaders def 3
|
||||
par__tablesize ### Test --table-size --tablesize
|
||||
par__tablesize 93
|
||||
par__tablesize 93
|
||||
par_dburl_user_password_host_port ### Test dburl with username password host port
|
||||
par_dburl_user_password_host_port Test dburl with username password host port
|
||||
par_dburl_user_password_host_port OK
|
||||
par_listproc ### Test --show-processlist|proclist|listproc
|
||||
par_listproc 2 17
|
||||
par_listproc 2 17
|
||||
par_listproc 2 17
|
||||
par_noheaders ### Test --noheaders --no-headers -n
|
||||
par_noheaders abc 1
|
||||
par_noheaders def 3
|
||||
par_noheaders abc 1
|
||||
par_noheaders def 3
|
||||
par_noheaders abc 1
|
||||
par_noheaders def 3
|
||||
par_debug ### Test --debug
|
||||
par_debug dburl mysql://tange:tange@/
|
||||
par_debug databasedriver mysql user tange password tange host port database tange query
|
||||
par_debug [ | ((sleep 1; rm /TMP/tmpfile') & mysql --defaults-extra-file=/TMP/tmpfile' --user=tange tange)]
|
||||
par_debug Test if --debug works
|
||||
par_debug Yes it does
|
||||
par_help ### Test --help -h
|
||||
par_help Usage:
|
||||
par_help sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [sqlcommand]
|
||||
par_help sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl < sql_command_file
|
||||
par_help
|
||||
par_help See 'man sql' for the options
|
||||
par_help Usage:
|
||||
par_help sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [sqlcommand]
|
||||
par_help sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl < sql_command_file
|
||||
par_help
|
||||
par_help See 'man sql' for the options
|
||||
par_html ### Test --html
|
||||
par_html <TABLE BORDER=1><TR><TH>id</TH><TH>data</TH></TR><TR><TD>1</TD><TD>abc</TD></TR><TR><TD>3</TD><TD>def</TD></TR></TABLE>
|
||||
par_passthrough ### Test --passthrough -p
|
||||
par_passthrough <TABLE BORDER=1><TR><TH>id</TH><TH>data</TH></TR><TR><TD>1</TD><TD>abc</TD></TR><TR><TD>3</TD><TD>def</TD></TR></TABLE>
|
||||
par_passthrough <TABLE BORDER=1><TR><TH>id</TH><TH>data</TH></TR><TR><TD>1</TD><TD>abc</TD></TR><TR><TD>3</TD><TD>def</TD></TR></TABLE>
|
||||
par_read_sql_from_file ### Test reading sql from file
|
||||
par_read_sql_from_file Test reading SQL from file works
|
||||
par_read_sql_from_file Yes it does
|
||||
par_retry ### Test -r - retry 3 times
|
||||
par_retry dburl pg://nongood@127.0.0.3:2227/
|
||||
par_retry databasedriver pg user nongood password host 127.0.0.3 port 2227 database nongood query
|
||||
par_retry [ | psql -h 127.0.0.3 -U nongood -p 2227 -d nongood]
|
||||
par_retry psql: error: connection to server at "127.0.0.3", port 2227 failed: Connection refused
|
||||
par_retry Is the server running on that host and accepting TCP/IP connections?
|
||||
par_retry [ | psql -h 127.0.0.3 -U nongood -p 2227 -d nongood]
|
||||
par_retry psql: error: connection to server at "127.0.0.3", port 2227 failed: Connection refused
|
||||
par_retry Is the server running on that host and accepting TCP/IP connections?
|
||||
par_retry [ | psql -h 127.0.0.3 -U nongood -p 2227 -d nongood]
|
||||
par_retry psql: error: connection to server at "127.0.0.3", port 2227 failed: Connection refused
|
||||
par_retry Is the server running on that host and accepting TCP/IP connections?
|
||||
par_retry ### Test --retries=s
|
||||
par_retry dburl pg://nongood@127.0.0.3:2227/
|
||||
par_retry databasedriver pg user nongood password host 127.0.0.3 port 2227 database nongood query
|
||||
par_retry [ | psql -h 127.0.0.3 -U nongood -p 2227 -d nongood]
|
||||
par_retry psql: error: connection to server at "127.0.0.3", port 2227 failed: Connection refused
|
||||
par_retry Is the server running on that host and accepting TCP/IP connections?
|
||||
par_retry [ | psql -h 127.0.0.3 -U nongood -p 2227 -d nongood]
|
||||
par_retry psql: error: connection to server at "127.0.0.3", port 2227 failed: Connection refused
|
||||
par_retry Is the server running on that host and accepting TCP/IP connections?
|
||||
par_retry [ | psql -h 127.0.0.3 -U nongood -p 2227 -d nongood]
|
||||
par_retry psql: error: connection to server at "127.0.0.3", port 2227 failed: Connection refused
|
||||
par_retry Is the server running on that host and accepting TCP/IP connections?
|
||||
par_retry [ | psql -h 127.0.0.3 -U nongood -p 2227 -d nongood]
|
||||
par_retry psql: error: connection to server at "127.0.0.3", port 2227 failed: Connection refused
|
||||
par_retry Is the server running on that host and accepting TCP/IP connections?
|
||||
par_sep ### Test --sep -s
|
||||
par_sep 2 1
|
||||
par_sep 2 1
|
||||
par_shebang-Y ### Test of #! -Y with file as input
|
||||
par_shebang-Y Testing if -Y works
|
||||
par_shebang-Y Yes it does
|
||||
|
@ -88,6 +88,6 @@ par_sql_aliases Yes it works
|
|||
par_sql_on_cmdline ### Test reading sql on command line
|
||||
par_sql_on_cmdline Test reading SQL from command line
|
||||
par_sql_on_cmdline Yes it does
|
||||
par_tablesize ### Test --table-size --tablesize
|
||||
par_tablesize 93
|
||||
par_tablesize 93
|
||||
par_version ### Test --version -V
|
||||
par_version 13 74 535
|
||||
par_version 13 74 535
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
par_listproc ### Test --listproc
|
||||
par_listproc SELECT CPU_TIME/100000, SYS.V_$SQL.SQL_TEXT, USERNAME FROM SYS.V_$SQL, SYS.V_$SESSION WHERE SYS.V_$SQL.SQL_ID = SYS.V_$SESSION.SQL_ID(+) AND username IS NOT NULL ORDER BY CPU_TIME DESC
|
||||
par_listproc *
|
||||
par_listproc ERROR at line 1:
|
||||
par_listproc ORA-00942: table or view does not exist
|
||||
par_listproc
|
||||
par_listproc CPU_TIME/100000 SQL_TEXT USERNAME
|
||||
par_listproc --------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------
|
||||
par_listproc 1.99999 SELECT CPU_TIME/100000, SYS.V_$SQL.SQL_TEXT, USERNAME FROM SYS.V_$SQL, SYS.V_$SESSION WHERE SYS.V_$SQL.SQL_ID = SYS.V_$SESSION.SQL_ID(+) AND username IS NOT NULL ORDER BY CPU_TIME DESC SYSTEM
|
||||
par_listproc
|
||||
par_listproc Id User Host db Command Time State Info
|
||||
par_listproc XXX sqlunittest localhost sqlunittest Query 0 starting show processlist
|
||||
par_listproc XXX sqlunittest localhost sqlunittest Query 0 init show processlist
|
||||
par_multiarg_on_command_line ### Test oracle with multiple arguments on the command line
|
||||
par_multiarg_on_command_line
|
||||
par_multiarg_on_command_line 'ARG
|
||||
|
@ -36,28 +35,52 @@ par_newline_on_commandline 3
|
|||
par_newline_on_commandline
|
||||
par_showdatabases ### Test --show-databases
|
||||
par_showdatabases
|
||||
par_showdatabases TABLESPACE_NAME BLOCK_SIZE INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS MAX_SIZE PCT_INCREASE MIN_EXTLEN STATUS CONTENTS LOGGING FOR EXTENT_MAN ALLOCATIO SEGMEN DEF_TAB_ RETENTION BIG PREDICA ENC COMPRESS_FOR
|
||||
par_showdatabases ------------------------------ ---------- -------------- ----------- ----------- ----------- ---------- ------------ ---------- --------- --------- --------- --- ---------- --------- ------ -------- ----------- --- ------- --- ------------
|
||||
par_showdatabases SYSTEM 8192 65536 1 2147483645 2147483645 65536 ONLINE PERMANENT LOGGING NO LOCAL SYSTEM MANUAL DISABLED NOT APPLY NO HOST NO
|
||||
par_showdatabases SYSAUX 8192 65536 1 2147483645 2147483645 65536 ONLINE PERMANENT LOGGING NO LOCAL SYSTEM AUTO DISABLED NOT APPLY NO HOST NO
|
||||
par_showdatabases UNDOTBS1 8192 65536 1 2147483645 2147483645 65536 ONLINE UNDO LOGGING NO LOCAL SYSTEM MANUAL DISABLED NOGUARANTEE NO HOST NO
|
||||
par_showdatabases TEMP 8192 1048576 1048576 1 2147483645 0 1048576 ONLINE TEMPORARY NOLOGGING NO LOCAL UNIFORM MANUAL DISABLED NOT APPLY NO HOST NO
|
||||
par_showdatabases USERS 8192 65536 1 2147483645 2147483645 65536 ONLINE PERMANENT LOGGING NO LOCAL SYSTEM AUTO DISABLED NOT APPLY NO HOST NO
|
||||
par_showdatabases TABLESPACE_NAME BLOCK_SIZE INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS MAX_SIZE PCT_INCREASE MIN_EXTLEN STATUS CONTENTS LOGGING FOR EXTENT_MAN ALLOCATIO SEGMEN DEF_TAB_ RETENTION BIG PREDICA ENC COMPRESS_FOR DEF_INME DEF_INME DEF_INMEMORY_DI DEF_INMEMORY_COMP DEF_INMEMORY_ SHARED DEF_INDE INDEX_COMPRES DEF_CELLMEMORY DEF_INMEMORY DEF_INMEMORY_SERVICE_NAME LOST_WR C
|
||||
par_showdatabases ------------------------------ ---------- -------------- ----------- ----------- ----------- ---------- ------------ ---------- --------- --------------------- --------- --- ---------- --------- ------ -------- ----------- --- ------- --- ------------------------------ -------- -------- --------------- ----------------- ------------- ------------- -------- ------------- ---------------- ------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------- -
|
||||
par_showdatabases SYSTEM 8192 65536 1 2147483645 2147483645 65536 ONLINE PERMANENT LOGGING YES LOCAL SYSTEM MANUAL DISABLED NOT APPLY YES HOST NO DISABLED SHARED DISABLED OFF N
|
||||
par_showdatabases SYSAUX 8192 65536 1 2147483645 2147483645 65536 ONLINE PERMANENT LOGGING YES LOCAL SYSTEM AUTO DISABLED NOT APPLY YES HOST NO DISABLED SHARED DISABLED OFF N
|
||||
par_showdatabases UNDOTBS1 8192 65536 1 2147483645 2147483645 65536 ONLINE UNDO LOGGING NO LOCAL SYSTEM MANUAL DISABLED NOGUARANTEE YES HOST NO DISABLED SHARED DISABLED OFF N
|
||||
par_showdatabases TEMP 8192 1048576 1048576 1 2147483645 0 1048576 ONLINE TEMPORARY NOLOGGING NO LOCAL UNIFORM MANUAL DISABLED NOT APPLY NO HOST NO DISABLED SHARED DISABLED OFF N
|
||||
par_showdatabases USERS 8192 65536 1 2147483645 2147483645 65536 ONLINE PERMANENT LOGGING NO LOCAL SYSTEM AUTO DISABLED NOT APPLY YES HOST NO DISABLED SHARED DISABLED OFF N
|
||||
par_showdatabases
|
||||
par_showtables ### Test --show-tables
|
||||
par_showtables
|
||||
par_showtables
|
||||
par_showtables
|
||||
par_showtables --------------------------------------------------------------------------------------------------------------------------------
|
||||
par_showtables 7 rows selected.
|
||||
par_showtables COUNTRIES
|
||||
par_showtables DEPARTMENTS
|
||||
par_showtables EMPLOYEES
|
||||
par_showtables JOBS
|
||||
par_showtables JOB_HISTORY
|
||||
par_showtables LOCATIONS
|
||||
par_showtables 31 rows selected.
|
||||
par_showtables AQ$_SCHEDULES
|
||||
par_showtables HELP
|
||||
par_showtables MVIEW$_ADV_AJG
|
||||
par_showtables MVIEW$_ADV_BASETABLE
|
||||
par_showtables MVIEW$_ADV_CLIQUE
|
||||
par_showtables MVIEW$_ADV_ELIGIBLE
|
||||
par_showtables MVIEW$_ADV_EXCEPTIONS
|
||||
par_showtables MVIEW$_ADV_FILTER
|
||||
par_showtables MVIEW$_ADV_FILTERINSTANCE
|
||||
par_showtables MVIEW$_ADV_FJG
|
||||
par_showtables MVIEW$_ADV_GC
|
||||
par_showtables MVIEW$_ADV_INFO
|
||||
par_showtables MVIEW$_ADV_JOURNAL
|
||||
par_showtables MVIEW$_ADV_LEVEL
|
||||
par_showtables MVIEW$_ADV_LOG
|
||||
par_showtables MVIEW$_ADV_OUTPUT
|
||||
par_showtables MVIEW$_ADV_PARAMETERS
|
||||
par_showtables MVIEW$_ADV_PLAN
|
||||
par_showtables MVIEW$_ADV_PRETTY
|
||||
par_showtables MVIEW$_ADV_ROLLUP
|
||||
par_showtables MVIEW$_ADV_SQLDEPEND
|
||||
par_showtables MVIEW$_ADV_TEMP
|
||||
par_showtables MVIEW$_ADV_WORKLOAD
|
||||
par_showtables OBJECT_NAME
|
||||
par_showtables REGIONS
|
||||
par_showtables OL$
|
||||
par_showtables OL$HINTS
|
||||
par_showtables OL$NODES
|
||||
par_showtables REDO_DB
|
||||
par_showtables REDO_LOG
|
||||
par_showtables SCHEDULER_JOB_ARGS_TBL
|
||||
par_showtables SCHEDULER_PROGRAM_ARGS_TBL
|
||||
par_showtables SQLPLUS_PRODUCT_PROFILE
|
||||
par_sql_from_url ### Test reading sql from url command line
|
||||
par_sql_from_url Test reading SQL from command line
|
||||
par_sql_from_url Yes it works
|
||||
|
@ -100,12 +123,18 @@ par_test_alias_with_statement Query from stdin
|
|||
par_test_cyclic ### Test cyclic alias .sql/aliases
|
||||
par_test_cyclic :cyclic3 is a cyclic alias
|
||||
par_test_dburl_colon ### Test dburl :
|
||||
par_test_dburl_colon Error:
|
||||
par_test_dburl_colon : is not defined in ~/.sql/aliases ~/.dburl.aliases /etc/sql/aliases /usr/local/bin/dburl.aliases /usr/local/bin/dburl.aliases.dist
|
||||
par_test_dburl_colon sql: Error: : is not defined in ~/.sql/aliases ~/.dburl.aliases /etc/sql/aliases /usr/local/bin/dburl.aliases /usr/local/bin/dburl.aliases.dist
|
||||
par_test_dburl_colon
|
||||
par_test_dburl_colon sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [command]
|
||||
par_test_dburl_colon Usage:
|
||||
par_test_dburl_colon sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [sqlcommand]
|
||||
par_test_dburl_colon sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl < sql_command_file
|
||||
par_test_dburl_colon
|
||||
par_test_dburl_colon See 'man sql' for the options
|
||||
par_test_empty_dburl ### Test empty dburl
|
||||
par_test_empty_dburl Error:
|
||||
par_test_empty_dburl is not a valid DBURL
|
||||
par_test_empty_dburl sql: Error: is not a valid DBURL
|
||||
par_test_empty_dburl
|
||||
par_test_empty_dburl sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [command]
|
||||
par_test_empty_dburl Usage:
|
||||
par_test_empty_dburl sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [sqlcommand]
|
||||
par_test_empty_dburl sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl < sql_command_file
|
||||
par_test_empty_dburl
|
||||
par_test_empty_dburl See 'man sql' for the options
|
||||
|
|
Loading…
Reference in a new issue