mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-12-04 11:57:55 +00:00
Compare commits
3 commits
e47cf98377
...
14089a1ff0
Author | SHA1 | Date | |
---|---|---|---|
14089a1ff0 | |||
044e46fa74 | |||
6e69bc6b38 |
28
NEWS
28
NEWS
|
@ -1,3 +1,31 @@
|
|||
20241122
|
||||
|
||||
New in this release:
|
||||
|
||||
* --pipe --block works similar to --pipepart --block if --block size is negative.
|
||||
|
||||
* DBURLs can be written with / instead of %2F for sqlite and CSV.
|
||||
|
||||
* Bug fixes and man page updates.
|
||||
|
||||
News about GNU Parallel:
|
||||
|
||||
* Embarrassingly GNU parallel
|
||||
https://dengin.xyz/blog/2024/10/24/embarrassingly-gnu-parallel/
|
||||
|
||||
* GNU Parallel for Your Terminal Tasks
|
||||
https://erolrecep.github.io/posts/gnuparallel_for_your_terminal_tasks/
|
||||
|
||||
* How to leverage GNU parallel to utilize multiple cores while running AUGUSTUS
|
||||
https://lifescienceshub.wixsite.com/lifesciencehub/post/how-to-leverage-gnu-parallel-to-utilize-multiple-cores-while-running-augustus
|
||||
|
||||
* GNU Parallel: The Good Parts
|
||||
https://diekmeier.de/posts/2024-11-17-gnu-parallel/
|
||||
|
||||
* Put your CPU to work with GNU Parallel
|
||||
https://www.redhat.com/en/blog/gnu-parallel
|
||||
|
||||
|
||||
20241022
|
||||
|
||||
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-20241022.tar.bz2
|
||||
wget https://ftpmirror.gnu.org/parallel/parallel-20241022.tar.bz2.sig
|
||||
gpg parallel-20241022.tar.bz2.sig
|
||||
bzip2 -dc parallel-20241022.tar.bz2 | tar xvf -
|
||||
cd parallel-20241022
|
||||
wget https://ftpmirror.gnu.org/parallel/parallel-20241122.tar.bz2
|
||||
wget https://ftpmirror.gnu.org/parallel/parallel-20241122.tar.bz2.sig
|
||||
gpg parallel-20241122.tar.bz2.sig
|
||||
bzip2 -dc parallel-20241122.tar.bz2 | tar xvf -
|
||||
cd parallel-20241122
|
||||
./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-20241022.tar.bz2
|
||||
wget https://ftpmirror.gnu.org/parallel/parallel-20241022.tar.bz2.sig
|
||||
gpg parallel-20241022.tar.bz2.sig
|
||||
bzip2 -dc parallel-20241022.tar.bz2 | tar xvf -
|
||||
cd parallel-20241022
|
||||
wget https://ftpmirror.gnu.org/parallel/parallel-20241122.tar.bz2
|
||||
wget https://ftpmirror.gnu.org/parallel/parallel-20241122.tar.bz2.sig
|
||||
gpg parallel-20241122.tar.bz2.sig
|
||||
bzip2 -dc parallel-20241122.tar.bz2 | tar xvf -
|
||||
cd parallel-20241122
|
||||
./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, October 22). GNU Parallel 20241022 ('Sinwar Nasrallah').
|
||||
Zenodo. https://doi.org/10.5281/zenodo.13957646
|
||||
Tange, O. (2024, November 22). GNU Parallel 20241122 ('Ahoo Daryaei').
|
||||
Zenodo. https://doi.org/10.5281/zenodo.14207479
|
||||
|
||||
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 20241022.
|
||||
# Generated by GNU Autoconf 2.71 for parallel 20241122.
|
||||
#
|
||||
# Report bugs to <bug-parallel@gnu.org>.
|
||||
#
|
||||
|
@ -610,8 +610,8 @@ MAKEFLAGS=
|
|||
# Identity of this package.
|
||||
PACKAGE_NAME='parallel'
|
||||
PACKAGE_TARNAME='parallel'
|
||||
PACKAGE_VERSION='20241022'
|
||||
PACKAGE_STRING='parallel 20241022'
|
||||
PACKAGE_VERSION='20241122'
|
||||
PACKAGE_STRING='parallel 20241122'
|
||||
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 20241022 to adapt to many kinds of systems.
|
||||
\`configure' configures parallel 20241122 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 20241022:";;
|
||||
short | recursive ) echo "Configuration of parallel 20241122:";;
|
||||
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 20241022
|
||||
parallel configure 20241122
|
||||
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 20241022, which was
|
||||
It was created by parallel $as_me 20241122, 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='20241022'
|
||||
VERSION='20241122'
|
||||
|
||||
|
||||
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 20241022, which was
|
||||
This file was extended by parallel $as_me 20241122, 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 20241022
|
||||
parallel config.status 20241122
|
||||
configured by $0, generated by GNU Autoconf 2.71,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
AC_INIT([parallel],[20241022],[bug-parallel@gnu.org])
|
||||
AC_INIT([parallel],[20241122],[bug-parallel@gnu.org])
|
||||
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
AC_CONFIG_FILES([
|
||||
|
|
21
doc/haikus
21
doc/haikus
|
@ -4,6 +4,24 @@
|
|||
|
||||
Quote of the month:
|
||||
|
||||
GNU parallel is awesome. Use it more often in your scripts!
|
||||
-- Wade @WadeGrimshire@twitter
|
||||
|
||||
i rly love gnu parallel over xargs, it's basically the same but has lots of useful and well documented options. sry if u know already
|
||||
-- d@nny "disc@" mc² @hipsterelectron@circumstances.run
|
||||
|
||||
ainda não inventaram palavras capazes de expressar minha gratidão aos desenvolvedores do GNU Parallel
|
||||
-- nueidris @nueidris.kawaii.social
|
||||
|
||||
Und die Tage jetzt hab ich GNU parallel für mich entdeckt, auch ne nette Geschichte, gerade wenn's irgendwelche remote APIs sind.
|
||||
-- Vince @dd1des.bsky.social
|
||||
|
||||
gnu parallelすごい!!!
|
||||
-- たらたら@nosennyuu@twitter
|
||||
|
||||
GNU parallel is awesome. Use it more often in your scripts!
|
||||
-- Wade @WadeGrimshire@twitter
|
||||
|
||||
by extreme do you mean extremely slow? you could do it at least 100x faster using awk + grep + gnu parallel
|
||||
-- @ObssessedDev@twitter
|
||||
|
||||
|
@ -221,6 +239,9 @@ https://negfeedback.blogspot.com/2020/05/indispensable-command-line-tools.html
|
|||
|
||||
=== Used ===
|
||||
|
||||
GNU parallel is so satisfying
|
||||
-- James Coman @jcoman.bsky.social
|
||||
|
||||
GNU Parallel is one of the most helpful tools I've been using recently, and it's just something like: parallel -j4 'gzip {}' ::: folder/*.csv
|
||||
-- Milton Pividori @miltondp@twitter
|
||||
|
||||
|
|
|
@ -34,6 +34,12 @@ make short
|
|||
|
||||
== Update version ==
|
||||
|
||||
https://savannah.gnu.org/news/submit.php?group=parallel
|
||||
|
||||
Draft:
|
||||
perl -ne '/It\sis\savailable/..0 and print' doc/release_new_version | clipboard
|
||||
|
||||
|
||||
https://zenodo.org/deposit/new
|
||||
|
||||
Do you already have a DOI for this upload? No
|
||||
|
@ -112,8 +118,7 @@ lbry://@GnuParallel#4/parallel-20210322.tar.bz2
|
|||
|
||||
. .last-doitag.txt
|
||||
file_path="`pwd`/parallel-$YYYYMMDD.tar.bz2"
|
||||
title="GNU Parallel $YYYYMMDD ('$SPCTAG') [stable]"
|
||||
|
||||
#title="GNU Parallel $YYYYMMDD ('$SPCTAG') [stable]"
|
||||
title="GNU Parallel $YYYYMMDD ('$SPCTAG')"
|
||||
name="GNU-Parallel-$YYYYMMDD-$TAG"
|
||||
author="Ole Tange"
|
||||
|
@ -121,6 +126,7 @@ license="GNU GPLv3 or later"
|
|||
thumbnail_url=https://www.gnu.org/software/parallel/logo-gray+black10000.png
|
||||
channel_name="@GnuParallel"
|
||||
tags_opt='--tag gnu --tag parallel --tag free --tag software'
|
||||
release_time=$(date -d "$YYYYMMDD" +%s)
|
||||
|
||||
description="An easy way to support GNU Parallel is to tip on LBRY.
|
||||
|
||||
|
@ -141,8 +147,7 @@ lbrynet publish \
|
|||
--license="$license" \
|
||||
--thumbnail_url="$thumbnail_url" \
|
||||
--channel_name="$channel_name" \
|
||||
|
||||
# --release_time="$release_time" \
|
||||
--release_time="$release_time" \
|
||||
|
||||
== Update website ==
|
||||
|
||||
|
@ -267,30 +272,39 @@ from:tange@gnu.org
|
|||
to:parallel@gnu.org, bug-parallel@gnu.org
|
||||
stable-bcc: Jesse Alama <jessealama@fastmail.fm>
|
||||
|
||||
Subject: GNU Parallel 20241022 ('Sinwar Nasrallah') released
|
||||
Subject: GNU Parallel 20241122 ('Ahoo Daryaei') released
|
||||
|
||||
GNU Parallel 20241022 ('Sinwar Nasrallah') has been released. It is available for download at: lbry://@GnuParallel:4
|
||||
GNU Parallel 20241122 ('Ahoo Daryaei') has been released. It is available for download at: lbry://@GnuParallel:4
|
||||
|
||||
Quote of the month:
|
||||
|
||||
GNU Parallel is one of the most helpful tools I've been using recently, and it's just something like: parallel -j4 'gzip {}' ::: folder/*.csv
|
||||
-- Milton Pividori @miltondp@twitter
|
||||
GNU parallel is so satisfying
|
||||
-- James Coman @jcoman.bsky.social
|
||||
|
||||
New in this release:
|
||||
|
||||
* No new features. This is a candidate for a stable release.
|
||||
* --pipe --block works similar to --pipepart --block if --block size is negative.
|
||||
|
||||
* DBURLs can be written with / instead of %2F for sqlite and CSV.
|
||||
|
||||
* Bug fixes and man page updates.
|
||||
|
||||
News about GNU Parallel:
|
||||
|
||||
* Separate arguments with a custom separator in GNU Parallel https://boxofcuriosities.co.uk/post/separate-arguments-with-a-custom-separator-in-gnu-parallel
|
||||
* Embarrassingly GNU parallel
|
||||
https://dengin.xyz/blog/2024/10/24/embarrassingly-gnu-parallel/
|
||||
|
||||
* GNU parallel is underrated https://amontalenti.com/2021/11/10/parallel
|
||||
* GNU Parallel for Your Terminal Tasks
|
||||
https://erolrecep.github.io/posts/gnuparallel_for_your_terminal_tasks/
|
||||
|
||||
* Unlocking the Power of Supercomputers: My HPC Adventure with 2800 Cores and GNU Parallel https://augalip.com/2024/03/10/unlocking-the-power-of-supercomputers-my-hpc-adventure-with-2800-cores-and-gnu-parallel/
|
||||
* How to leverage GNU parallel to utilize multiple cores while running AUGUSTUS
|
||||
https://lifescienceshub.wixsite.com/lifesciencehub/post/how-to-leverage-gnu-parallel-to-utilize-multiple-cores-while-running-augustus
|
||||
|
||||
* Converting WebP Images to PNG Using parallel and dwebp https://bytefreaks.net/gnulinux/bash/converting-webp-images-to-png-using-parallel-and-dwebp
|
||||
* GNU Parallel: The Good Parts
|
||||
https://diekmeier.de/posts/2024-11-17-gnu-parallel/
|
||||
|
||||
* Put your CPU to work with GNU Parallel
|
||||
https://www.redhat.com/en/blog/gnu-parallel
|
||||
|
||||
|
||||
GNU Parallel - For people who live life in the parallel lane.
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
<directory name="parallel" rev="402" vrev="3" srcmd5="eabde6986e84a2ee89d3573226212c2b">
|
||||
<directory name="parallel" rev="403" vrev="2" srcmd5="5859fde67057353653a861981a199093">
|
||||
<entry name="Makefile" md5="d62bf3bdf277f9787ce915e6d1309317" size="1254" mtime="1727031498" />
|
||||
<entry name="PKGBUILD" md5="d0637068b5eb4d647b3e281a32c4a383" size="795" mtime="1729438421" />
|
||||
<entry name="parallel-20241022.tar.bz2" md5="d6b236cd452959c5f8e1740f9d6bd52f" size="2677432" mtime="1729438421" />
|
||||
<entry name="parallel-20241022.tar.bz2.sig" md5="310b1d88f6413d6f3126be2eb55514ba" size="2080" mtime="1729438421" />
|
||||
<entry name="parallel.spec" md5="f723f1c49a4f85e96ee2cd0bbf668e77" size="6224" mtime="1729437802" />
|
||||
<entry name="parallel_20240922.tar.gz" md5="e0845f75badfde97790129aa5b793563" size="2917995" mtime="1729437803" />
|
||||
<entry name="parallel_20241022.dsc" md5="3f822685e8ab5c249191f2afad054250" size="557" mtime="1729438422" />
|
||||
<entry name="parallel_20241022.tar.gz" md5="c4c614919c48a7f9718c6de7e00ae681" size="2918710" mtime="1729438422" />
|
||||
<entry name="PKGBUILD" md5="2147d5d0557cb1d87e905ec16b855cfb" size="795" mtime="1732313409" />
|
||||
<entry name="parallel-20241122.tar.bz2" md5="37e808b62e43c87c49bb4b876cec0a8d" size="2677531" mtime="1732313409" />
|
||||
<entry name="parallel-20241122.tar.bz2.sig" md5="b2b7cd40233f2da68986ef54d02128ce" size="2080" mtime="1732313410" />
|
||||
<entry name="parallel.spec" md5="47eaf53b1ed3821dedd238cabccf1149" size="6224" mtime="1732313410" />
|
||||
<entry name="parallel_20241122.dsc" md5="d35026e2ea3527f8d24fd1048923812a" size="557" mtime="1732313410" />
|
||||
<entry name="parallel_20241122.tar.gz" md5="cf60d96051e42ec28f8acb9080620223" size="2922864" mtime="1732313410" />
|
||||
</directory>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
Summary: Shell tool for executing jobs in parallel
|
||||
Name: parallel
|
||||
Version: 20241022
|
||||
Version: 20241122
|
||||
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 20241022 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "parset 20241122 (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 20241022 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "parset 20241122 (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>"
|
||||
|
|
|
@ -601,7 +601,7 @@ _parset_main() {
|
|||
fi
|
||||
if [ "$_parset_NAME" = "--version" ] ; then
|
||||
# shellcheck disable=SC2006
|
||||
echo "parset 20241022 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "parset 20241122 (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>"
|
||||
|
|
|
@ -601,7 +601,7 @@ _parset_main() {
|
|||
fi
|
||||
if [ "$_parset_NAME" = "--version" ] ; then
|
||||
# shellcheck disable=SC2006
|
||||
echo "parset 20241022 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "parset 20241122 (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 20241022 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "parset 20241122 (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 (beta testing)
|
||||
=head2 csh
|
||||
|
||||
B<env_parallel> for B<csh> breaks B<$PARALLEL>, so do not use
|
||||
B<$PARALLEL>.
|
||||
|
@ -679,7 +679,7 @@ B<--session> is supported.
|
|||
=back
|
||||
|
||||
|
||||
=head2 tcsh (beta testing)
|
||||
=head2 tcsh
|
||||
|
||||
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 20241022 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "parset 20241122 (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>"
|
||||
|
|
|
@ -601,7 +601,7 @@ _parset_main() {
|
|||
fi
|
||||
if [ "$_parset_NAME" = "--version" ] ; then
|
||||
# shellcheck disable=SC2006
|
||||
echo "parset 20241022 (GNU parallel `parallel --minversion 1`)"
|
||||
echo "parset 20241122 (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 = 20241022;
|
||||
$Global::version = 20241122;
|
||||
Getopt::Long::Configure("bundling","require_order");
|
||||
get_options_from_array(\@ARGV) || die_usage();
|
||||
if($opt::version) {
|
||||
|
|
127
src/parallel
127
src/parallel
|
@ -1165,6 +1165,8 @@ sub spreadstdin() {
|
|||
my $blocksize = int($Global::blocksize);
|
||||
my $in = *STDIN;
|
||||
my $timeout = $Global::blocktimeout;
|
||||
my @parts;
|
||||
my $everything_read;
|
||||
|
||||
if($opt::skip_first_line) {
|
||||
my $newline;
|
||||
|
@ -1178,12 +1180,14 @@ sub spreadstdin() {
|
|||
my $eof;
|
||||
my $garbage_read;
|
||||
|
||||
sub read_block() {
|
||||
# Read a --blocksize from STDIN
|
||||
sub read_with_alarm($) {
|
||||
my ($readsize) = @_;
|
||||
my ($nread,$alarm,$read_everything);
|
||||
if($readsize < 0) {
|
||||
$readsize = -$readsize;
|
||||
$read_everything = 1;
|
||||
}
|
||||
# possibly interrupted by --blocktimeout
|
||||
# Add up to the next full block
|
||||
my $readsize = $blocksize - (length $buf) % $blocksize;
|
||||
my ($nread,$alarm);
|
||||
eval {
|
||||
local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
|
||||
# --blocktimeout (or 0 if not set)
|
||||
|
@ -1191,13 +1195,13 @@ sub spreadstdin() {
|
|||
if($] >= 5.026) {
|
||||
do {
|
||||
$nread = sysread $in, $buf, $readsize, length $buf;
|
||||
$readsize -= $nread;
|
||||
if(not $read_everything) { $readsize -= $nread; }
|
||||
} while($readsize and $nread);
|
||||
} else {
|
||||
# Less efficient reading, but 32-bit sysread compatible
|
||||
do {
|
||||
$nread = sysread($in,substr($buf,length $buf,0),$readsize,0);
|
||||
$readsize -= $nread;
|
||||
if(not $read_everything) { $readsize -= $nread; }
|
||||
} while($readsize and $nread);
|
||||
}
|
||||
alarm 0;
|
||||
|
@ -1208,7 +1212,60 @@ sub spreadstdin() {
|
|||
} else {
|
||||
$alarm = 0;
|
||||
}
|
||||
$eof = not ($nread or $alarm);
|
||||
# Is this EOF?
|
||||
return not ($nread or $alarm);
|
||||
}
|
||||
|
||||
sub read_block_per_jobslot() {
|
||||
if(not $everything_read) {
|
||||
# Read everything in readsize of 2^17
|
||||
# 21 = 20s
|
||||
# 20 = 16s
|
||||
# 19 = 16s,15s
|
||||
# 18 = 15s
|
||||
# 17 = 14s
|
||||
# 16 = 14s
|
||||
# 15 = 14s
|
||||
$eof = read_with_alarm(-2**17);
|
||||
if($eof) {
|
||||
$everything_read = 1;
|
||||
# Trick the rest of the code to think we are not done reading blocks yet.
|
||||
$eof = 0;
|
||||
# Chop into parts
|
||||
my $total_size = length($buf);
|
||||
my $jobslots = $Global::max_jobs_running;
|
||||
my $parts = -$Global::blocksize * $jobslots;
|
||||
my $part_size = int($total_size / $parts);
|
||||
for my $i (0 .. $parts - 1) {
|
||||
my $start = $i * $part_size;
|
||||
my $end = ($i == $parts - 1) ? $total_size : $start + $part_size;
|
||||
# Extract the chunk from buffer
|
||||
push @parts, substr($buf, $start, $end - $start);
|
||||
}
|
||||
$buf="";
|
||||
} else {
|
||||
# What do we do here? Caused by alarm.
|
||||
::die_bug("Read block from pipe failed");
|
||||
}
|
||||
}
|
||||
if(@parts) {
|
||||
# pop part and return that
|
||||
$buf .= shift @parts;
|
||||
} else {
|
||||
# All parts are done: Let the rest of the code know we are EOF
|
||||
$eof = 1;
|
||||
}
|
||||
}
|
||||
|
||||
sub read_block() {
|
||||
# Read a --blocksize from STDIN
|
||||
if($Global::blocksize < 0) {
|
||||
read_block_per_jobslot();
|
||||
} else {
|
||||
# Add up to the next full block
|
||||
my $readsize = $blocksize - (length $buf) % $blocksize;
|
||||
$eof = read_with_alarm($readsize);
|
||||
}
|
||||
}
|
||||
|
||||
sub pass_n_line_records() {
|
||||
|
@ -2888,7 +2945,7 @@ sub check_invalid_option_combinations() {
|
|||
|
||||
sub init_globals() {
|
||||
# Defaults:
|
||||
$Global::version = 20241022;
|
||||
$Global::version = 20241122;
|
||||
$Global::progname = 'parallel';
|
||||
$::name = "GNU Parallel";
|
||||
$Global::infinity = 2**31;
|
||||
|
@ -5946,8 +6003,8 @@ 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, October 22). GNU Parallel 20241022 ('Sinwar Nasrallah').",
|
||||
" Zenodo. https://doi.org/10.5281/zenodo.13957646",
|
||||
" Tange, O. (2024, November 22). GNU Parallel 20241122 ('Ahoo Daryaei').",
|
||||
" Zenodo. https://doi.org/10.5281/zenodo.14207479",
|
||||
"",
|
||||
# Before changing these lines, please read
|
||||
# https://www.gnu.org/software/parallel/parallel_design.html#citation-notice
|
||||
|
@ -5979,8 +6036,8 @@ 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, October 22). GNU Parallel 20241022 ('Sinwar Nasrallah').",
|
||||
" Zenodo. https://doi.org/10.5281/zenodo.13957646",
|
||||
" Tange, O. (2024, November 22). GNU Parallel 20241122 ('Ahoo Daryaei').",
|
||||
" Zenodo. https://doi.org/10.5281/zenodo.14207479",
|
||||
"",
|
||||
# Before changing these line, please read
|
||||
# https://www.gnu.org/software/parallel/parallel_design.html#citation-notice and
|
||||
|
@ -6106,20 +6163,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_13957646,",
|
||||
"\@software{tange_2024_14207479,",
|
||||
" author = {Tange, Ole},",
|
||||
" title = {GNU Parallel 20241022 ('Sinwar Nasrallah')},",
|
||||
" month = Oct,",
|
||||
" title = {GNU Parallel 20241122 ('Ahoo Daryaei')},",
|
||||
" month = Nov,",
|
||||
" year = 2024,",
|
||||
" 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.13957646},",
|
||||
" url = {https://doi.org/10.5281/zenodo.13957646}",
|
||||
" doi = {10.5281/zenodo.14207479},",
|
||||
" url = {https://doi.org/10.5281/zenodo.14207479}",
|
||||
"}",
|
||||
"",
|
||||
"(Feel free to use \\nocite{tange_2024_13957646})",
|
||||
"(Feel free to use \\nocite{tange_2024_14207479})",
|
||||
"",
|
||||
# Before changing these lines, please read
|
||||
# https://www.gnu.org/software/parallel/parallel_design.html#citation-notice and
|
||||
|
@ -15159,12 +15216,18 @@ sub check_permissions($) {
|
|||
}
|
||||
|
||||
sub parse_dburl($) {
|
||||
sub undef_if_empty {
|
||||
if(defined($_[0]) and $_[0] eq "") {
|
||||
return undef;
|
||||
}
|
||||
return $_[0];
|
||||
}
|
||||
my $url = shift;
|
||||
my %options = ();
|
||||
# sql:mysql://[[user][:password]@][host][:port]/[database[/table][?query]]
|
||||
|
||||
if($url=~m!^(?:sql:)? # You can prefix with 'sql:'
|
||||
((?:oracle|ora|mysql|pg|postgres|postgresql)(?:s|ssl|)|
|
||||
((?:oracle|ora|mysql|pg|postgres|postgresql|influx|influxdb)(?:s|ssl|)|
|
||||
(?:sqlite|sqlite2|sqlite3|csv)):// # Databasedriver ($1)
|
||||
(?:
|
||||
([^:@/][^:@]*|) # Username ($2)
|
||||
|
@ -15179,25 +15242,27 @@ sub parse_dburl($) {
|
|||
)?
|
||||
(?:
|
||||
/
|
||||
([^/?]*)? # Database ($6)
|
||||
([^?]*)? # Database ($6)
|
||||
)?
|
||||
(?:
|
||||
/
|
||||
([^?]*)? # Table ($7)
|
||||
)?
|
||||
([^?/]*)? # Table ($7)
|
||||
)
|
||||
(?:
|
||||
\?
|
||||
(.*)? # Query ($8)
|
||||
)?
|
||||
$!ix) {
|
||||
$options{databasedriver} = ::undef_if_empty(lc(uri_unescape($1)));
|
||||
$options{user} = ::undef_if_empty(uri_unescape($2));
|
||||
$options{password} = ::undef_if_empty(uri_unescape($3));
|
||||
$options{host} = ::undef_if_empty(uri_unescape($4));
|
||||
$options{port} = ::undef_if_empty(uri_unescape($5));
|
||||
$options{database} = ::undef_if_empty(uri_unescape($6));
|
||||
$options{table} = ::undef_if_empty(uri_unescape($7));
|
||||
$options{query} = ::undef_if_empty(uri_unescape($8));
|
||||
$options{databasedriver} = undef_if_empty(lc(uri_unescape($1)));
|
||||
$options{user} = undef_if_empty(uri_unescape($2));
|
||||
$options{password} = undef_if_empty(uri_unescape($3));
|
||||
$options{host} = undef_if_empty(uri_unescape($4));
|
||||
$options{port} = undef_if_empty(uri_unescape($5));
|
||||
$options{database} = undef_if_empty(uri_unescape($6))
|
||||
|| $options{user} || $ENV{'USER'};
|
||||
$options{table} = undef_if_empty(uri_unescape($7))
|
||||
|| $options{user} || $ENV{'USER'};
|
||||
$options{query} = undef_if_empty(uri_unescape($8));
|
||||
::debug("sql", "dburl $url\n");
|
||||
::debug("sql", "databasedriver ", $options{databasedriver},
|
||||
" user ", $options{user},
|
||||
|
|
|
@ -134,7 +134,7 @@ B<Bash, Csh, or Tcsh aliases>: Use B<env_parallel>.
|
|||
|
||||
B<Zsh, Fish, Ksh, and Pdksh functions and aliases>: Use B<env_parallel>.
|
||||
|
||||
=item B<{}> (beta testing)
|
||||
=item B<{}>
|
||||
|
||||
Input line.
|
||||
|
||||
|
@ -155,7 +155,7 @@ See also: B<--plus> B<{.}> B<{/}> B<{//}> B<{/.}> B<{#}> B<{%}>
|
|||
B<{>I<n>B<}> B<{=>I<perl expression>B<=}>
|
||||
|
||||
|
||||
=item B<{.}> (beta testing)
|
||||
=item B<{.}>
|
||||
|
||||
Input line without extension.
|
||||
|
||||
|
@ -173,7 +173,7 @@ The replacement string B<{.}> can be changed with B<--extensionreplace>
|
|||
See also: B<{}> B<--extensionreplace>
|
||||
|
||||
|
||||
=item B<{/}> (beta testing)
|
||||
=item B<{/}>
|
||||
|
||||
Basename of input line.
|
||||
|
||||
|
@ -183,7 +183,7 @@ directory part removed.
|
|||
See also: B<{}> B<--basenamereplace>
|
||||
|
||||
|
||||
=item B<{//}> (beta testing)
|
||||
=item B<{//}>
|
||||
|
||||
Dirname of input line.
|
||||
|
||||
|
@ -193,7 +193,7 @@ line. See B<dirname>(1).
|
|||
See also: B<{}> B<--dirnamereplace>
|
||||
|
||||
|
||||
=item B<{/.}> (beta testing)
|
||||
=item B<{/.}>
|
||||
|
||||
Basename of input line without extension.
|
||||
|
||||
|
@ -204,7 +204,7 @@ B<{/}> and B<{.}>.
|
|||
See also: B<{}> B<--basenameextensionreplace>
|
||||
|
||||
|
||||
=item B<{#}> (beta testing)
|
||||
=item B<{#}>
|
||||
|
||||
Sequence number of the job to run.
|
||||
|
||||
|
@ -214,7 +214,7 @@ job being run. It contains the same number as $PARALLEL_SEQ.
|
|||
See also: B<{}> B<--seqreplace>
|
||||
|
||||
|
||||
=item B<{%}> (beta testing)
|
||||
=item B<{%}>
|
||||
|
||||
Job slot number.
|
||||
|
||||
|
@ -249,7 +249,7 @@ Notice how {%} and $PARALLEL_JOBSLOT differ in the retry run of C and D.
|
|||
See also: B<{}> B<--jobs> B<--slotreplace>
|
||||
|
||||
|
||||
=item B<{>I<n>B<}> (beta testing)
|
||||
=item B<{>I<n>B<}>
|
||||
|
||||
Argument from input source I<n> or the I<n>'th argument.
|
||||
|
||||
|
@ -263,7 +263,7 @@ See also: B<{}> B<{>I<n>.B<}> B<{>I<n>/B<}> B<{>I<n>//B<}>
|
|||
B<{>I<n>/.B<}> B<--colsep>
|
||||
|
||||
|
||||
=item B<{>I<n>.B<}> (beta testing)
|
||||
=item B<{>I<n>.B<}>
|
||||
|
||||
Argument from input source I<n> or the I<n>'th argument without
|
||||
extension.
|
||||
|
@ -278,7 +278,7 @@ extension removed.
|
|||
See also: B<{>I<n>B<}> B<{.}>
|
||||
|
||||
|
||||
=item B<{>I<n>/B<}> (beta testing)
|
||||
=item B<{>I<n>/B<}>
|
||||
|
||||
Basename of argument from input source I<n> or the I<n>'th argument.
|
||||
|
||||
|
@ -292,7 +292,7 @@ directory (if any) removed.
|
|||
See also: B<{>I<n>B<}> B<{/}>
|
||||
|
||||
|
||||
=item B<{>I<n>//B<}> (beta testing)
|
||||
=item B<{>I<n>//B<}>
|
||||
|
||||
Dirname of argument from input source I<n> or the I<n>'th argument.
|
||||
|
||||
|
@ -305,7 +305,7 @@ the I<n>'th argument (when used with B<-N>). See B<dirname>(1).
|
|||
See also: B<{>I<n>B<}> B<{//}>
|
||||
|
||||
|
||||
=item B<{>I<n>/.B<}> (beta testing)
|
||||
=item B<{>I<n>/.B<}>
|
||||
|
||||
Basename of argument from input source I<n> or the I<n>'th argument
|
||||
without extension.
|
||||
|
@ -321,7 +321,7 @@ directory (if any) and extension removed.
|
|||
See also: B<{>I<n>B<}> B<{/.}>
|
||||
|
||||
|
||||
=item B<{=>I<perl expression>B<=}> (beta testing)
|
||||
=item B<{=>I<perl expression>B<=}>
|
||||
|
||||
Replace with calculated I<perl expression>.
|
||||
|
||||
|
@ -438,7 +438,7 @@ See also: B<--rpl> B<--parens> B<{}> B<{=>I<n> I<perl expression>B<=}>
|
|||
B<--filter>
|
||||
|
||||
|
||||
=item B<{=>I<n> I<perl expression>B<=}> (beta testing)
|
||||
=item B<{=>I<n> I<perl expression>B<=}>
|
||||
|
||||
Positional equivalent to B<{=>I<perl expression>B<=}>.
|
||||
|
||||
|
@ -447,7 +447,7 @@ To understand positional replacement strings see B<{>I<n>B<}>.
|
|||
See also: B<{=>I<perl expression>B<=}> B<{>I<n>B<}>
|
||||
|
||||
|
||||
=item B<{>I<rpl>:I<format>B<}> (beta testing)
|
||||
=item B<{>I<rpl>:I<format>B<}>
|
||||
|
||||
Format replacement string.
|
||||
|
||||
|
@ -740,19 +740,25 @@ length of one record. For performance reasons I<size> should be bigger
|
|||
than a two records. GNU B<parallel> will warn you and automatically
|
||||
increase the size if you choose a I<size> that is too small.
|
||||
|
||||
If you use B<-N>, B<--block> should be bigger than N+1 records.
|
||||
|
||||
I<size> defaults to 1M.
|
||||
|
||||
When using B<--pipe-part> a negative block size is not interpreted as a
|
||||
blocksize but as the number of blocks each jobslot should have. So
|
||||
this will run 10*5 = 50 jobs in total:
|
||||
A negative block size is not interpreted as a blocksize but as the
|
||||
number of blocks each jobslot should have. So B<--block -3> will make
|
||||
3 jobs for each jobslot. In other words: this will run 3*5 = 15 jobs
|
||||
in total:
|
||||
|
||||
parallel --pipe-part -a myfile --block -10 -j5 wc
|
||||
parallel --pipe-part -a myfile --block -3 -j5 wc
|
||||
cat myfile | parallel --pipe --block -3 -j5 wc
|
||||
|
||||
This is an efficient alternative to B<--round-robin> because data is
|
||||
never read by GNU B<parallel>, but you can still have very few
|
||||
jobslots process large amounts of data.
|
||||
B<--pipe-part --block> is an efficient alternative to B<--round-robin>
|
||||
because data is never read by GNU B<parallel>, but you can still have
|
||||
very few jobslots process huge amounts of data.
|
||||
|
||||
On the other hand, B<--pipe --block> is quite I<inefficient>: It reads
|
||||
the whole file into memory before splitting it. Thus input must be
|
||||
able to fit in memory.
|
||||
|
||||
If you use B<--block> -I<size>, input should be bigger than I<size>+1 records.
|
||||
|
||||
See also: UNIT PREFIX B<-N> B<--pipe> B<--pipe-part> B<--round-robin>
|
||||
B<--block-timeout>
|
||||
|
@ -1817,7 +1823,7 @@ If in doubt use B<-X> as that will most likely do what is needed.
|
|||
See also: B<-X> B<--xargs>
|
||||
|
||||
|
||||
=item B<--match> I<regexp> (beta testing)
|
||||
=item B<--match> I<regexp>
|
||||
|
||||
Match input source with regexp to set replacement fields.
|
||||
|
||||
|
@ -3124,7 +3130,7 @@ complete.
|
|||
|
||||
The format of a DBURL is:
|
||||
|
||||
[sql:]vendor://[[user][:pwd]@][host][:port]/[db]/table
|
||||
[sql:]vendor://[[user][:pwd]@][host][:port]/[db]/[table]
|
||||
|
||||
E.g.
|
||||
|
||||
|
@ -3134,11 +3140,16 @@ E.g.
|
|||
postgresql://scott:tiger@pg.example.com/pgdb/parjob
|
||||
pg:///parjob
|
||||
sqlite3:///%2Ftmp%2Fpardb.sqlite/parjob
|
||||
sqlite:///file_in_current_dir.sqlite/my_table
|
||||
csv:///%2Ftmp%2Fpardb/parjob
|
||||
csv:///./file_in_current_dir
|
||||
pg:////
|
||||
|
||||
Notice how / in the path of sqlite and CVS must be encoded as
|
||||
Notice how / in the path of sqlite and CSV must be encoded as
|
||||
%2F. Except the last / in CSV which must be a /.
|
||||
|
||||
I<db> and I<table> defaults to $USER: pg://// = pg:///$USER/$USER
|
||||
|
||||
It can also be an alias from ~/.sql/aliases:
|
||||
|
||||
:myalias mysql:///mydb/paralleljobs
|
||||
|
|
|
@ -173,11 +173,13 @@ The following features are in some of the comparable tools:
|
|||
|
||||
=back
|
||||
|
||||
As every new version of the programs are not tested the table may be
|
||||
Since each new version of the programs is not tested, the table may be
|
||||
outdated. Please file a bug report if you find errors (See REPORTING
|
||||
BUGS).
|
||||
|
||||
parallel:
|
||||
=head2 GNU Parallel
|
||||
|
||||
Summary (see legend above):
|
||||
|
||||
=over
|
||||
|
||||
|
@ -4916,6 +4918,8 @@ https://github.com/simonjwright/parallelize
|
|||
|
||||
=head2 Todo
|
||||
|
||||
https://github.com/rustunit/parallelrun?tab=readme-ov-file
|
||||
|
||||
https://github.com/justanhduc/task-spooler
|
||||
|
||||
https://manpages.ubuntu.com/manpages/xenial/man1/tsp.1.html
|
||||
|
|
|
@ -25,17 +25,6 @@ FUBAR in all files in this dir and subdirs:
|
|||
Note B<-q> is needed because of the space in 'FOO BAR'.
|
||||
|
||||
|
||||
=head2 EXAMPLE: Simple network scanner
|
||||
|
||||
B<prips> can generate IP-addresses from CIDR notation. With GNU
|
||||
B<parallel> you can build a simple network scanner to see which
|
||||
addresses respond to B<ping>:
|
||||
|
||||
prips 130.229.16.0/20 | \
|
||||
parallel --timeout 2 -j0 \
|
||||
'ping -c 1 {} >/dev/null && echo {}' 2>/dev/null
|
||||
|
||||
|
||||
=head2 EXAMPLE: Reading arguments from command line
|
||||
|
||||
GNU B<parallel> can take the arguments from command line instead of
|
||||
|
@ -49,6 +38,20 @@ To convert *.wav to *.mp3 using LAME running one process per CPU run:
|
|||
parallel lame {} -o {.}.mp3 ::: *.wav
|
||||
|
||||
|
||||
=head2 EXAMPLE: Running full commands in parallel
|
||||
|
||||
If there is no command given to GNU B<parallel>, then the arguments
|
||||
are treated as a command line.
|
||||
|
||||
To run B<gzip foo> and B<bzip2 bar> in parallel run:
|
||||
|
||||
parallel ::: "gzip foo" "bzip2 bar"
|
||||
|
||||
or:
|
||||
|
||||
(echo "gzip foo"; echo "bzip2 bar") | parallel
|
||||
|
||||
|
||||
=head2 EXAMPLE: Inserting multiple arguments
|
||||
|
||||
When moving a lot of files like this: B<mv *.log destdir> you will
|
||||
|
@ -377,6 +380,17 @@ the log:
|
|||
mv log log.1
|
||||
|
||||
|
||||
=head2 EXAMPLE: Simple network scanner
|
||||
|
||||
B<prips> can generate IP-addresses from CIDR notation. With GNU
|
||||
B<parallel> you can build a simple network scanner to see which
|
||||
addresses respond to B<ping>:
|
||||
|
||||
prips 130.229.16.0/20 | \
|
||||
parallel --timeout 2 -j0 \
|
||||
'ping -c 1 {} >/dev/null && echo {}' 2>/dev/null
|
||||
|
||||
|
||||
=head2 EXAMPLE: Removing file extension when processing files
|
||||
|
||||
When processing files removing the file extension using B<{.}> is
|
||||
|
|
|
@ -137,7 +137,7 @@ GetOptions(
|
|||
"help" => \$opt::dummy,
|
||||
) || exit(255);
|
||||
$Global::progname = ($0 =~ m:(^|/)([^/]+)$:)[1];
|
||||
$Global::version = 20241022;
|
||||
$Global::version = 20241122;
|
||||
if($opt::version) { version(); exit 0; }
|
||||
# Remove -D and --parallel=N
|
||||
my @s = (grep { ! /^-D$|^--parallel=\S+$/ }
|
||||
|
|
49
src/sql
49
src/sql
|
@ -234,6 +234,18 @@ To quote special characters use %-encoding specified in
|
|||
http://tools.ietf.org/html/rfc3986#section-2.1 (E.g. a password
|
||||
containing '/' would contain '%2F').
|
||||
|
||||
csv:///%2Ftmp%2Fparallel-bug-56096/mytable
|
||||
csv:////tmp/parallel-bug-56096/mytable
|
||||
mysql://me@/me/
|
||||
mysql:////
|
||||
|
||||
sqlite3:///%2Frun%2Fshm%2Fparallel.db
|
||||
sqlite3:///%2Frun%2Fshm%2Fparallel.db/table
|
||||
sqlite:///%2Ftmp%2Ffile.sqlite?SELECT
|
||||
csv:///%2Ftmp%2Fparallel-CSV/OK
|
||||
csv:///%2Fmust%2Ffail/fail
|
||||
sqlite3:///%2Frun%2Fshm%2Fparallel.db
|
||||
|
||||
Examples:
|
||||
|
||||
mysql://scott:tiger@my.example.com/mydb
|
||||
|
@ -245,12 +257,23 @@ Examples:
|
|||
sql:sqlite2:////tmp/db.sqlite?SELECT * FROM foo;
|
||||
sqlite3:///../db.sqlite3?SELECT%20*%20FROM%20foo;
|
||||
|
||||
Currently supported vendors: MySQL (mysql), MySQL with SSL (mysqls,
|
||||
mysqlssl), Oracle (oracle, ora), PostgreSQL (postgresql, pg, pgsql,
|
||||
postgres), PostgreSQL with SSL (postgresqlssl, pgs, pgsqlssl,
|
||||
postgresssl, pgssl, postgresqls, pgsqls, postgress), SQLite2 (sqlite,
|
||||
sqlite2), SQLite3 (sqlite3), InfluxDB 1.x (influx, influxdb), InfluxDB
|
||||
with SSL (influxdbssl, influxdbs, influxs, influxssl)
|
||||
Currently supported vendors:
|
||||
|
||||
=over 2
|
||||
|
||||
=item * MySQL (mysql) with SSL (mysqls, mysqlssl)
|
||||
|
||||
=item * Oracle (oracle, ora)
|
||||
|
||||
=item * PostgreSQL (postgresql, pg, pgsql, postgres) with SSL (postgresqlssl, pgs, pgsqlssl, postgresssl, pgssl, postgresqls, pgsqls, postgress)
|
||||
|
||||
=item * SQLite2 (sqlite, sqlite2)
|
||||
|
||||
=item * SQLite3 (sqlite3)
|
||||
|
||||
=item * InfluxDB 1.x (influx, influxdb) with SSL (influxdbssl, influxdbs, influxs, influxssl)
|
||||
|
||||
=back
|
||||
|
||||
Aliases must start with ':' and are read from
|
||||
/etc/sql/aliases and ~/.sql/aliases. The user's own
|
||||
|
@ -670,7 +693,7 @@ $Global::Initfile && unlink $Global::Initfile;
|
|||
exit ($err);
|
||||
|
||||
sub parse_options {
|
||||
$Global::version = 20241022;
|
||||
$Global::version = 20241122;
|
||||
$Global::progname = 'sql';
|
||||
|
||||
# This must be done first as this may exec myself
|
||||
|
@ -1152,9 +1175,9 @@ sub parse_dburl {
|
|||
my %options = ();
|
||||
# sql:mysql://[[user][:password]@][host][:port]/[database[?sql query]]
|
||||
|
||||
if($url=~m!(?:sql:)? # You can prefix with 'sql:'
|
||||
if($url=~m!^(?:sql:)? # You can prefix with 'sql:'
|
||||
((?:oracle|ora|mysql|pg|postgres|postgresql|influx|influxdb)(?:s|ssl|)|
|
||||
(?:sqlite|sqlite2|sqlite3)):// # Databasedriver ($1)
|
||||
(?:sqlite|sqlite2|sqlite3|csv)):// # Databasedriver ($1)
|
||||
(?:
|
||||
([^:@/][^:@]*|) # Username ($2)
|
||||
(?:
|
||||
|
@ -1168,21 +1191,21 @@ sub parse_dburl {
|
|||
)?
|
||||
(?:
|
||||
/
|
||||
([^?/]*)? # Database ($6)
|
||||
([^?]*)? # Database ($6)
|
||||
)?
|
||||
(?:
|
||||
/?
|
||||
\?
|
||||
(.*)? # Query ($7)
|
||||
)?
|
||||
!x) {
|
||||
$options{databasedriver} = undef_if_empty(uri_unescape($1));
|
||||
$!ix) {
|
||||
$options{databasedriver} = undef_if_empty(lc(uri_unescape($1)));
|
||||
$options{user} = undef_if_empty(uri_unescape($2));
|
||||
$options{password} = undef_if_empty(uri_unescape($3));
|
||||
$options{host} = undef_if_empty(uri_unescape($4));
|
||||
$options{port} = undef_if_empty(uri_unescape($5));
|
||||
$options{database} = undef_if_empty(uri_unescape($6))
|
||||
|| $options{user};
|
||||
|| $options{user} || $ENV{'USER'};
|
||||
$options{query} = undef_if_empty(uri_unescape($7));
|
||||
debug("dburl $url\n");
|
||||
debug("databasedriver ",$options{databasedriver}, " user ", $options{user},
|
||||
|
|
|
@ -8,6 +8,11 @@
|
|||
# Each should be taking 1-3s and be possible to run in parallel
|
||||
# I.e.: No race conditions, no logins
|
||||
|
||||
par_--pipe--block-2() {
|
||||
echo '### --block -2'
|
||||
yes `seq 100` | head -c 100M | parallel -j 5 --block -2 -k --pipe wc
|
||||
}
|
||||
|
||||
par_keep_order_make_job_1_output_fast() {
|
||||
echo '# EXAMPLE: Keep order, but make job 1 output fast'
|
||||
doit() {
|
||||
|
|
|
@ -8,6 +8,88 @@
|
|||
# Each should be taking 30-100s and be possible to run in parallel
|
||||
# I.e.: No race conditions, no logins
|
||||
|
||||
par__dburl_parsing() {
|
||||
mkdir -p test
|
||||
(
|
||||
cd test
|
||||
export me=$(whoami)
|
||||
pwd=$(pwd)
|
||||
pwdurl=$(pwd | perl -pe 's:/:%2F:g')
|
||||
dburls=(
|
||||
# relative path - no dir
|
||||
# relative path - with dir
|
||||
# full path
|
||||
# default
|
||||
|
||||
csv:///mydir/$me
|
||||
csv:///./mydir/$me
|
||||
csv:///.%2Fmydir/$me
|
||||
csv:///$pwd/$me
|
||||
csv:///$pwdurl/$me
|
||||
csv:///./$me
|
||||
csv:///./
|
||||
# this defaults to $me/$me = non-existent dir
|
||||
csv:///$me/$me
|
||||
csv:////$me
|
||||
csv:///$me/
|
||||
csv:////
|
||||
csv:///
|
||||
|
||||
sqlite3:///$me/$me
|
||||
sqlite3://mydir/$me/$me
|
||||
sqlite3:///mydir/$me/$me
|
||||
sqlite3:///mydir%2F$me/$me
|
||||
sqlite3:///$pwd/$me/$me
|
||||
sqlite3:///$pwdurl/$me/$me
|
||||
sqlite3:///$me/
|
||||
sqlite3:///$me/$me
|
||||
sqlite3:////$me
|
||||
sqlite3:///$me/
|
||||
sqlite3:////
|
||||
sqlite3:///
|
||||
|
||||
sqlite:///$me/$me
|
||||
sqlite://mydir/$me/$me
|
||||
sqlite:///mydir/$me/$me
|
||||
sqlite:///mydir%2F$me/$me
|
||||
sqlite:///$pwd/$me/$me
|
||||
sqlite:///$pwdurl/$me/$me
|
||||
sqlite:///$me/
|
||||
sqlite:///$me/$me
|
||||
sqlite:////$me
|
||||
sqlite:///$me/
|
||||
sqlite:////
|
||||
sqlite:///
|
||||
|
||||
mysql://$me@/$me/$me
|
||||
mysql://$me@/$me/
|
||||
mysql://$me@//
|
||||
mysql:///$me/$me
|
||||
mysql:////$me
|
||||
mysql:///$me/
|
||||
mysql:////
|
||||
mysql:///
|
||||
|
||||
pg://$me@/$me/$me
|
||||
pg://$me@/$me/
|
||||
pg://$me@//
|
||||
pg:///$me/$me
|
||||
pg:////$me
|
||||
pg:///$me/
|
||||
pg:////
|
||||
pg:///
|
||||
)
|
||||
test_dburl() {
|
||||
mkdir mydir
|
||||
parallel -k --sqlandworker $1 echo ::: {1..3}
|
||||
rm -rf "$me" mydir
|
||||
}
|
||||
export -f test_dburl
|
||||
parallel -j1 --tag test_dburl ::: ${dburls[@]}
|
||||
)
|
||||
rmdir test
|
||||
}
|
||||
|
||||
par_sshlogin_parsing() {
|
||||
echo '### Generate sshlogins to test parsing'
|
||||
sudo sshd -p 22222
|
||||
|
@ -564,7 +646,7 @@ par_memfree() {
|
|||
grep -v TERM | grep -v ps/display.c
|
||||
}
|
||||
|
||||
par_test_detected_shell() {
|
||||
par__test_detected_shell() {
|
||||
echo '### bug #42913: Dont use $SHELL but the shell currently running'
|
||||
|
||||
shells="bash csh dash fish fizsh ksh ksh93 mksh posh rbash rush rzsh sash sh static-sh tcsh yash zsh"
|
||||
|
|
|
@ -73,7 +73,7 @@ par_exit() {
|
|||
export -f test_signal
|
||||
ulimit -c 0
|
||||
stdout parallel -j15 -k --timeout 20 --tag test_signal ::: {0..64} |
|
||||
perl -pe 's/line 1: (\d+)/line 1: PID/'
|
||||
perl -pe 's/line 1: *(\d+)/line 1: PID/'
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,3 +1,15 @@
|
|||
par_--pipe--block-2 ### --block -2
|
||||
par_--pipe--block-2 35910 3591000 10485720
|
||||
par_--pipe--block-2 35910 3591000 10485720
|
||||
par_--pipe--block-2 35910 3591000 10485720
|
||||
par_--pipe--block-2 35910 3591000 10485720
|
||||
par_--pipe--block-2 35910 3591000 10485720
|
||||
par_--pipe--block-2 35910 3591000 10485720
|
||||
par_--pipe--block-2 35910 3591000 10485720
|
||||
par_--pipe--block-2 35911 3591100 10486012
|
||||
par_--pipe--block-2 35910 3591000 10485720
|
||||
par_--pipe--block-2 35910 3591000 10485720
|
||||
par_--pipe--block-2 0 39 108
|
||||
par__arg_sep ### Test basic --arg-sep
|
||||
par__arg_sep a
|
||||
par__arg_sep b
|
||||
|
|
|
@ -1,3 +1,182 @@
|
|||
par__dburl_parsing csv:///mydir/tange parallel: Error:
|
||||
par__dburl_parsing csv:///mydir/tange Execution ERROR: Cannot open /tmp/parallel-local-30s-tmp/
|
||||
par__dburl_parsing csv:///mydir/tange `/tmp/trip`>/tmp/tripwire;
|
||||
par__dburl_parsing csv:///mydir/tange
|
||||
par__dburl_parsing csv:///mydir/tange "'@<?[]|~\/tmp/test/mydir/tange: No such file or directory (2) at /usr/lib/x86_64-linux-gnu/perl5/5.38/DBI/DBD/SqlEngine.pm line 1624.
|
||||
par__dburl_parsing csv:///mydir/tange called from /usr/local/bin/parallel at 15320.
|
||||
par__dburl_parsing csv:///mydir/tange
|
||||
par__dburl_parsing csv:///mydir/tange
|
||||
par__dburl_parsing csv:///./mydir/tange parallel: Error:
|
||||
par__dburl_parsing csv:///./mydir/tange Execution ERROR: Cannot open /tmp/parallel-local-30s-tmp/
|
||||
par__dburl_parsing csv:///./mydir/tange `/tmp/trip`>/tmp/tripwire;
|
||||
par__dburl_parsing csv:///./mydir/tange
|
||||
par__dburl_parsing csv:///./mydir/tange "'@<?[]|~\/tmp/test/mydir/tange: No such file or directory (2) at /usr/lib/x86_64-linux-gnu/perl5/5.38/DBI/DBD/SqlEngine.pm line 1624.
|
||||
par__dburl_parsing csv:///./mydir/tange called from /usr/local/bin/parallel at 15320.
|
||||
par__dburl_parsing csv:///./mydir/tange
|
||||
par__dburl_parsing csv:///./mydir/tange
|
||||
par__dburl_parsing csv:///.%2Fmydir/tange parallel: Error:
|
||||
par__dburl_parsing csv:///.%2Fmydir/tange Execution ERROR: Cannot open /tmp/parallel-local-30s-tmp/
|
||||
par__dburl_parsing csv:///.%2Fmydir/tange `/tmp/trip`>/tmp/tripwire;
|
||||
par__dburl_parsing csv:///.%2Fmydir/tange
|
||||
par__dburl_parsing csv:///.%2Fmydir/tange "'@<?[]|~\/tmp/test/mydir/tange: No such file or directory (2) at /usr/lib/x86_64-linux-gnu/perl5/5.38/DBI/DBD/SqlEngine.pm line 1624.
|
||||
par__dburl_parsing csv:///.%2Fmydir/tange called from /usr/local/bin/parallel at 15320.
|
||||
par__dburl_parsing csv:///.%2Fmydir/tange
|
||||
par__dburl_parsing csv:///.%2Fmydir/tange
|
||||
par__dburl_parsing csv:////tmp/parallel-local-30s-tmp/ 1
|
||||
par__dburl_parsing csv:////tmp/parallel-local-30s-tmp/ 2
|
||||
par__dburl_parsing csv:////tmp/parallel-local-30s-tmp/ 3
|
||||
par__dburl_parsing `/tmp/trip`>/tmp/tripwire; parallel: Error: `/tmp/trip`>/tmp/tripwire; is not a valid DBURL
|
||||
par__dburl_parsing parallel: Error: is not a valid DBURL
|
||||
par__dburl_parsing "'@<?[]|~\/tmp/test/tange parallel: Error: "'@<?[]|~\/tmp/test/tange is not a valid DBURL
|
||||
par__dburl_parsing csv:///%2Ftmp%2Fparallel-local-30s-tmp%2F parallel: Error: tange is not a directory.
|
||||
par__dburl_parsing `%2Ftmp%2Ftrip`>%2Ftmp%2Ftripwire; parallel: Error: `%2Ftmp%2Ftrip`>%2Ftmp%2Ftripwire; is not a valid DBURL
|
||||
par__dburl_parsing parallel: Error: is not a valid DBURL
|
||||
par__dburl_parsing "'@<?[]|~\%2Ftmp%2Ftest/tange parallel: Error: "'@<?[]|~\%2Ftmp%2Ftest/tange is not a valid DBURL
|
||||
par__dburl_parsing csv:///./tange parallel: Error:
|
||||
par__dburl_parsing csv:///./tange Execution ERROR: Cannot open /tmp/parallel-local-30s-tmp/
|
||||
par__dburl_parsing csv:///./tange `/tmp/trip`>/tmp/tripwire;
|
||||
par__dburl_parsing csv:///./tange
|
||||
par__dburl_parsing csv:///./tange "'@<?[]|~\/tmp/test/tange: No such file or directory (2) at /usr/lib/x86_64-linux-gnu/perl5/5.38/DBI/DBD/SqlEngine.pm line 1624.
|
||||
par__dburl_parsing csv:///./tange called from /usr/local/bin/parallel at 15320.
|
||||
par__dburl_parsing csv:///./tange
|
||||
par__dburl_parsing csv:///./tange
|
||||
par__dburl_parsing csv:///./ parallel: Error:
|
||||
par__dburl_parsing csv:///./ Execution ERROR: Cannot open /tmp/parallel-local-30s-tmp/
|
||||
par__dburl_parsing csv:///./ `/tmp/trip`>/tmp/tripwire;
|
||||
par__dburl_parsing csv:///./
|
||||
par__dburl_parsing csv:///./ "'@<?[]|~\/tmp/test/tange: No such file or directory (2) at /usr/lib/x86_64-linux-gnu/perl5/5.38/DBI/DBD/SqlEngine.pm line 1624.
|
||||
par__dburl_parsing csv:///./ called from /usr/local/bin/parallel at 15320.
|
||||
par__dburl_parsing csv:///./
|
||||
par__dburl_parsing csv:///./
|
||||
par__dburl_parsing csv:///tange/tange parallel: Error: tange is not a directory.
|
||||
par__dburl_parsing csv:////tange parallel: Error: tange is not a directory.
|
||||
par__dburl_parsing csv:///tange/ parallel: Error: tange is not a directory.
|
||||
par__dburl_parsing csv://// parallel: Error: tange is not a directory.
|
||||
par__dburl_parsing csv:/// parallel: Error: tange is not a directory.
|
||||
par__dburl_parsing sqlite3:///tange/tange 1
|
||||
par__dburl_parsing sqlite3:///tange/tange 2
|
||||
par__dburl_parsing sqlite3:///tange/tange 3
|
||||
par__dburl_parsing sqlite3://mydir/tange/tange 1
|
||||
par__dburl_parsing sqlite3://mydir/tange/tange 2
|
||||
par__dburl_parsing sqlite3://mydir/tange/tange 3
|
||||
par__dburl_parsing sqlite3:///mydir/tange/tange 1
|
||||
par__dburl_parsing sqlite3:///mydir/tange/tange 2
|
||||
par__dburl_parsing sqlite3:///mydir/tange/tange 3
|
||||
par__dburl_parsing sqlite3:///mydir%2Ftange/tange 1
|
||||
par__dburl_parsing sqlite3:///mydir%2Ftange/tange 2
|
||||
par__dburl_parsing sqlite3:///mydir%2Ftange/tange 3
|
||||
par__dburl_parsing sqlite3:////tmp/parallel-local-30s-tmp/ DBI connect('dbname=/tmp/parallel-local-30s-tmp','',...) failed: unable to open database file at /usr/local/bin/parallel line 15114.
|
||||
par__dburl_parsing `/tmp/trip`>/tmp/tripwire; parallel: Error: `/tmp/trip`>/tmp/tripwire; is not a valid DBURL
|
||||
par__dburl_parsing parallel: Error: is not a valid DBURL
|
||||
par__dburl_parsing "'@<?[]|~\/tmp/test/tange/tange parallel: Error: "'@<?[]|~\/tmp/test/tange/tange is not a valid DBURL
|
||||
par__dburl_parsing sqlite3:///%2Ftmp%2Fparallel-local-30s-tmp%2F DBD::SQLite::db prepare failed: near "/": syntax error [for Statement "DROP TABLE IF EXISTS /tmp/parallel-local-30s-tmp/;"] at /usr/local/bin/parallel line 15317, <$fh> line 1.
|
||||
par__dburl_parsing `%2Ftmp%2Ftrip`>%2Ftmp%2Ftripwire; parallel: Error: `%2Ftmp%2Ftrip`>%2Ftmp%2Ftripwire; is not a valid DBURL
|
||||
par__dburl_parsing parallel: Error: is not a valid DBURL
|
||||
par__dburl_parsing "'@<?[]|~\%2Ftmp%2Ftest/tange/tange parallel: Error: "'@<?[]|~\%2Ftmp%2Ftest/tange/tange is not a valid DBURL
|
||||
par__dburl_parsing sqlite3:///tange/ 1
|
||||
par__dburl_parsing sqlite3:///tange/ 2
|
||||
par__dburl_parsing sqlite3:///tange/ 3
|
||||
par__dburl_parsing sqlite3:///tange/tange 1
|
||||
par__dburl_parsing sqlite3:///tange/tange 2
|
||||
par__dburl_parsing sqlite3:///tange/tange 3
|
||||
par__dburl_parsing sqlite3:////tange 1
|
||||
par__dburl_parsing sqlite3:////tange 2
|
||||
par__dburl_parsing sqlite3:////tange 3
|
||||
par__dburl_parsing sqlite3:///tange/ 1
|
||||
par__dburl_parsing sqlite3:///tange/ 2
|
||||
par__dburl_parsing sqlite3:///tange/ 3
|
||||
par__dburl_parsing sqlite3://// 1
|
||||
par__dburl_parsing sqlite3://// 2
|
||||
par__dburl_parsing sqlite3://// 3
|
||||
par__dburl_parsing sqlite3:/// 1
|
||||
par__dburl_parsing sqlite3:/// 2
|
||||
par__dburl_parsing sqlite3:/// 3
|
||||
par__dburl_parsing sqlite:///tange/tange 1
|
||||
par__dburl_parsing sqlite:///tange/tange 2
|
||||
par__dburl_parsing sqlite:///tange/tange 3
|
||||
par__dburl_parsing sqlite://mydir/tange/tange 1
|
||||
par__dburl_parsing sqlite://mydir/tange/tange 2
|
||||
par__dburl_parsing sqlite://mydir/tange/tange 3
|
||||
par__dburl_parsing sqlite:///mydir/tange/tange 1
|
||||
par__dburl_parsing sqlite:///mydir/tange/tange 2
|
||||
par__dburl_parsing sqlite:///mydir/tange/tange 3
|
||||
par__dburl_parsing sqlite:///mydir%2Ftange/tange 1
|
||||
par__dburl_parsing sqlite:///mydir%2Ftange/tange 2
|
||||
par__dburl_parsing sqlite:///mydir%2Ftange/tange 3
|
||||
par__dburl_parsing sqlite:////tmp/parallel-local-30s-tmp/ DBI connect('dbname=/tmp/parallel-local-30s-tmp','',...) failed: unable to open database file at /usr/local/bin/parallel line 15114.
|
||||
par__dburl_parsing `/tmp/trip`>/tmp/tripwire; parallel: Error: `/tmp/trip`>/tmp/tripwire; is not a valid DBURL
|
||||
par__dburl_parsing parallel: Error: is not a valid DBURL
|
||||
par__dburl_parsing "'@<?[]|~\/tmp/test/tange/tange parallel: Error: "'@<?[]|~\/tmp/test/tange/tange is not a valid DBURL
|
||||
par__dburl_parsing sqlite:///%2Ftmp%2Fparallel-local-30s-tmp%2F DBD::SQLite::db prepare failed: near "/": syntax error [for Statement "DROP TABLE IF EXISTS /tmp/parallel-local-30s-tmp/;"] at /usr/local/bin/parallel line 15317, <$fh> line 1.
|
||||
par__dburl_parsing `%2Ftmp%2Ftrip`>%2Ftmp%2Ftripwire; parallel: Error: `%2Ftmp%2Ftrip`>%2Ftmp%2Ftripwire; is not a valid DBURL
|
||||
par__dburl_parsing parallel: Error: is not a valid DBURL
|
||||
par__dburl_parsing "'@<?[]|~\%2Ftmp%2Ftest/tange/tange parallel: Error: "'@<?[]|~\%2Ftmp%2Ftest/tange/tange is not a valid DBURL
|
||||
par__dburl_parsing sqlite:///tange/ 1
|
||||
par__dburl_parsing sqlite:///tange/ 2
|
||||
par__dburl_parsing sqlite:///tange/ 3
|
||||
par__dburl_parsing sqlite:///tange/tange 1
|
||||
par__dburl_parsing sqlite:///tange/tange 2
|
||||
par__dburl_parsing sqlite:///tange/tange 3
|
||||
par__dburl_parsing sqlite:////tange 1
|
||||
par__dburl_parsing sqlite:////tange 2
|
||||
par__dburl_parsing sqlite:////tange 3
|
||||
par__dburl_parsing sqlite:///tange/ 1
|
||||
par__dburl_parsing sqlite:///tange/ 2
|
||||
par__dburl_parsing sqlite:///tange/ 3
|
||||
par__dburl_parsing sqlite://// 1
|
||||
par__dburl_parsing sqlite://// 2
|
||||
par__dburl_parsing sqlite://// 3
|
||||
par__dburl_parsing sqlite:/// 1
|
||||
par__dburl_parsing sqlite:/// 2
|
||||
par__dburl_parsing sqlite:/// 3
|
||||
par__dburl_parsing mysql://tange@/tange/tange 1
|
||||
par__dburl_parsing mysql://tange@/tange/tange 2
|
||||
par__dburl_parsing mysql://tange@/tange/tange 3
|
||||
par__dburl_parsing mysql://tange@/tange/ 1
|
||||
par__dburl_parsing mysql://tange@/tange/ 2
|
||||
par__dburl_parsing mysql://tange@/tange/ 3
|
||||
par__dburl_parsing mysql://tange@// 1
|
||||
par__dburl_parsing mysql://tange@// 2
|
||||
par__dburl_parsing mysql://tange@// 3
|
||||
par__dburl_parsing mysql:///tange/tange 1
|
||||
par__dburl_parsing mysql:///tange/tange 2
|
||||
par__dburl_parsing mysql:///tange/tange 3
|
||||
par__dburl_parsing mysql:////tange 1
|
||||
par__dburl_parsing mysql:////tange 2
|
||||
par__dburl_parsing mysql:////tange 3
|
||||
par__dburl_parsing mysql:///tange/ 1
|
||||
par__dburl_parsing mysql:///tange/ 2
|
||||
par__dburl_parsing mysql:///tange/ 3
|
||||
par__dburl_parsing mysql://// 1
|
||||
par__dburl_parsing mysql://// 2
|
||||
par__dburl_parsing mysql://// 3
|
||||
par__dburl_parsing mysql:/// 1
|
||||
par__dburl_parsing mysql:/// 2
|
||||
par__dburl_parsing mysql:/// 3
|
||||
par__dburl_parsing pg://tange@/tange/tange 1
|
||||
par__dburl_parsing pg://tange@/tange/tange 2
|
||||
par__dburl_parsing pg://tange@/tange/tange 3
|
||||
par__dburl_parsing pg://tange@/tange/ 1
|
||||
par__dburl_parsing pg://tange@/tange/ 2
|
||||
par__dburl_parsing pg://tange@/tange/ 3
|
||||
par__dburl_parsing pg://tange@// 1
|
||||
par__dburl_parsing pg://tange@// 2
|
||||
par__dburl_parsing pg://tange@// 3
|
||||
par__dburl_parsing pg:///tange/tange 1
|
||||
par__dburl_parsing pg:///tange/tange 2
|
||||
par__dburl_parsing pg:///tange/tange 3
|
||||
par__dburl_parsing pg:////tange 1
|
||||
par__dburl_parsing pg:////tange 2
|
||||
par__dburl_parsing pg:////tange 3
|
||||
par__dburl_parsing pg:///tange/ 1
|
||||
par__dburl_parsing pg:///tange/ 2
|
||||
par__dburl_parsing pg:///tange/ 3
|
||||
par__dburl_parsing pg://// 1
|
||||
par__dburl_parsing pg://// 2
|
||||
par__dburl_parsing pg://// 3
|
||||
par__dburl_parsing pg:/// 1
|
||||
par__dburl_parsing pg:/// 2
|
||||
par__dburl_parsing pg:/// 3
|
||||
par__groupby_big ### test --group-by on file bigger than block
|
||||
par__groupby_big --group-by on col 1..3, -n1..5
|
||||
par__groupby_big _pipe and _ppart (pipepart) must return the same
|
||||
|
@ -1608,7 +1787,58 @@ par__print_in_blocks ### bug #41565: Print happens in blocks - not after each jo
|
|||
par__print_in_blocks The timing here is important: a full second between each
|
||||
par__print_in_blocks 1
|
||||
par__print_in_blocks 300 ms jobs:
|
||||
par__print_in_blocks 3
|
||||
par__print_in_blocks 4
|
||||
par__test_detected_shell ### bug #42913: Dont use $SHELL but the shell currently running
|
||||
par__test_detected_shell test_unknown_shell bash Global::shell /usr/bin/bash
|
||||
par__test_detected_shell test_unknown_shell csh Global::shell /usr/bin/bash
|
||||
par__test_detected_shell test_unknown_shell dash Global::shell /usr/bin/bash
|
||||
par__test_detected_shell test_unknown_shell fish Global::shell /usr/bin/bash
|
||||
par__test_detected_shell test_unknown_shell fizsh Global::shell /usr/bin/zsh
|
||||
par__test_detected_shell test_unknown_shell ksh Global::shell /usr/bin/bash
|
||||
par__test_detected_shell test_unknown_shell ksh93 Global::shell /usr/bin/bash
|
||||
par__test_detected_shell test_unknown_shell mksh Global::shell /usr/bin/bash
|
||||
par__test_detected_shell test_unknown_shell posh Global::shell /usr/bin/bash
|
||||
par__test_detected_shell test_unknown_shell rbash Global::shell /usr/bin/bash
|
||||
par__test_detected_shell test_unknown_shell rzsh Global::shell /usr/bin/bash
|
||||
par__test_detected_shell test_unknown_shell sash Global::shell /usr/bin/sh
|
||||
par__test_detected_shell test_unknown_shell sh Global::shell /usr/bin/bash
|
||||
par__test_detected_shell test_unknown_shell tcsh Global::shell /usr/bin/bash
|
||||
par__test_detected_shell test_unknown_shell yash Global::shell /usr/bin/bash
|
||||
par__test_detected_shell test_unknown_shell zsh Global::shell /usr/bin/bash
|
||||
par__test_detected_shell test_known_shell_c bash Global::shell /usr/bin/bash
|
||||
par__test_detected_shell test_known_shell_c csh Global::shell /usr/bin/csh
|
||||
par__test_detected_shell test_known_shell_c dash Global::shell /usr/bin/dash
|
||||
par__test_detected_shell test_known_shell_c fish Global::shell /usr/bin/fish
|
||||
par__test_detected_shell test_known_shell_c fizsh Global::shell /usr/bin/zsh
|
||||
par__test_detected_shell test_known_shell_c ksh Global::shell /usr/bin/ksh
|
||||
par__test_detected_shell test_known_shell_c ksh93 Global::shell /usr/bin/ksh93
|
||||
par__test_detected_shell test_known_shell_c mksh Global::shell /usr/bin/mksh
|
||||
par__test_detected_shell test_known_shell_c posh Global::shell /usr/bin/posh
|
||||
par__test_detected_shell test_known_shell_c rbash Global::shell /usr/bin/rbash
|
||||
par__test_detected_shell test_known_shell_c rzsh Global::shell /usr/bin/rzsh
|
||||
par__test_detected_shell test_known_shell_c sash Global::shell /usr/bin/sh
|
||||
par__test_detected_shell test_known_shell_c sh Global::shell /usr/bin/sh
|
||||
par__test_detected_shell test_known_shell_c static-sh Global::shell /usr/bin/static-sh
|
||||
par__test_detected_shell test_known_shell_c tcsh Global::shell /usr/bin/tcsh
|
||||
par__test_detected_shell test_known_shell_c yash Global::shell /usr/bin/yash
|
||||
par__test_detected_shell test_known_shell_c zsh Global::shell /usr/bin/zsh
|
||||
par__test_detected_shell test_known_shell_pipe bash Global::shell /usr/bin/bash
|
||||
par__test_detected_shell test_known_shell_pipe csh Global::shell /usr/bin/csh
|
||||
par__test_detected_shell test_known_shell_pipe dash Global::shell /usr/bin/dash
|
||||
par__test_detected_shell test_known_shell_pipe fish Global::shell /usr/bin/fish
|
||||
par__test_detected_shell test_known_shell_pipe fizsh Global::shell /usr/bin/fizsh
|
||||
par__test_detected_shell test_known_shell_pipe ksh Global::shell /usr/bin/ksh
|
||||
par__test_detected_shell test_known_shell_pipe ksh93 Global::shell /usr/bin/ksh93
|
||||
par__test_detected_shell test_known_shell_pipe mksh Global::shell /usr/bin/mksh
|
||||
par__test_detected_shell test_known_shell_pipe posh Global::shell /usr/bin/posh
|
||||
par__test_detected_shell test_known_shell_pipe rbash Global::shell /usr/bin/rbash
|
||||
par__test_detected_shell test_known_shell_pipe rzsh Global::shell /usr/bin/rzsh
|
||||
par__test_detected_shell test_known_shell_pipe sash Global::shell /usr/bin/sh
|
||||
par__test_detected_shell test_known_shell_pipe sh Global::shell /usr/bin/sh
|
||||
par__test_detected_shell test_known_shell_pipe static-sh Global::shell /usr/bin/static-sh
|
||||
par__test_detected_shell test_known_shell_pipe tcsh Global::shell /usr/bin/tcsh
|
||||
par__test_detected_shell test_known_shell_pipe yash Global::shell /usr/bin/yash
|
||||
par__test_detected_shell test_known_shell_pipe zsh Global::shell /usr/bin/zsh
|
||||
par_bin ### Test --bin
|
||||
par_bin 2 2 4
|
||||
par_bin 2 2 4
|
||||
|
@ -3187,57 +3417,6 @@ par_sshlogin_parsing @grp1+grp2/4//usr/bin/ssh withpassword::;`echo>/tmp/trap`;)
|
|||
par_sshlogin_parsing @grp1+grp2/4//usr/bin/ssh withpassword::;`echo>/tmp/trap`;)(|<*&"'@lo withpassword
|
||||
par_sshlogin_parsing @grp1+grp2/4//usr/bin/ssh withpassword::;`echo>/tmp/trap`;)(|<*&"'@lo:22222 22222
|
||||
par_sshlogin_parsing @grp1+grp2/4//usr/bin/ssh withpassword::;`echo>/tmp/trap`;)(|<*&"'@lo:22222 withpassword
|
||||
par_test_detected_shell ### bug #42913: Dont use $SHELL but the shell currently running
|
||||
par_test_detected_shell test_unknown_shell bash Global::shell /usr/bin/bash
|
||||
par_test_detected_shell test_unknown_shell csh Global::shell /usr/bin/bash
|
||||
par_test_detected_shell test_unknown_shell dash Global::shell /usr/bin/bash
|
||||
par_test_detected_shell test_unknown_shell fish Global::shell /usr/bin/bash
|
||||
par_test_detected_shell test_unknown_shell fizsh Global::shell /usr/bin/zsh
|
||||
par_test_detected_shell test_unknown_shell ksh Global::shell /usr/bin/bash
|
||||
par_test_detected_shell test_unknown_shell ksh93 Global::shell /usr/bin/bash
|
||||
par_test_detected_shell test_unknown_shell mksh Global::shell /usr/bin/bash
|
||||
par_test_detected_shell test_unknown_shell posh Global::shell /usr/bin/bash
|
||||
par_test_detected_shell test_unknown_shell rbash Global::shell /usr/bin/bash
|
||||
par_test_detected_shell test_unknown_shell rzsh Global::shell /usr/bin/bash
|
||||
par_test_detected_shell test_unknown_shell sash Global::shell /usr/bin/sh
|
||||
par_test_detected_shell test_unknown_shell sh Global::shell /usr/bin/bash
|
||||
par_test_detected_shell test_unknown_shell tcsh Global::shell /usr/bin/bash
|
||||
par_test_detected_shell test_unknown_shell yash Global::shell /usr/bin/bash
|
||||
par_test_detected_shell test_unknown_shell zsh Global::shell /usr/bin/bash
|
||||
par_test_detected_shell test_known_shell_c bash Global::shell /usr/bin/bash
|
||||
par_test_detected_shell test_known_shell_c csh Global::shell /usr/bin/csh
|
||||
par_test_detected_shell test_known_shell_c dash Global::shell /usr/bin/dash
|
||||
par_test_detected_shell test_known_shell_c fish Global::shell /usr/bin/fish
|
||||
par_test_detected_shell test_known_shell_c fizsh Global::shell /usr/bin/zsh
|
||||
par_test_detected_shell test_known_shell_c ksh Global::shell /usr/bin/ksh
|
||||
par_test_detected_shell test_known_shell_c ksh93 Global::shell /usr/bin/ksh93
|
||||
par_test_detected_shell test_known_shell_c mksh Global::shell /usr/bin/mksh
|
||||
par_test_detected_shell test_known_shell_c posh Global::shell /usr/bin/posh
|
||||
par_test_detected_shell test_known_shell_c rbash Global::shell /usr/bin/rbash
|
||||
par_test_detected_shell test_known_shell_c rzsh Global::shell /usr/bin/rzsh
|
||||
par_test_detected_shell test_known_shell_c sash Global::shell /usr/bin/sh
|
||||
par_test_detected_shell test_known_shell_c sh Global::shell /usr/bin/sh
|
||||
par_test_detected_shell test_known_shell_c static-sh Global::shell /usr/bin/static-sh
|
||||
par_test_detected_shell test_known_shell_c tcsh Global::shell /usr/bin/tcsh
|
||||
par_test_detected_shell test_known_shell_c yash Global::shell /usr/bin/yash
|
||||
par_test_detected_shell test_known_shell_c zsh Global::shell /usr/bin/zsh
|
||||
par_test_detected_shell test_known_shell_pipe bash Global::shell /usr/bin/bash
|
||||
par_test_detected_shell test_known_shell_pipe csh Global::shell /usr/bin/csh
|
||||
par_test_detected_shell test_known_shell_pipe dash Global::shell /usr/bin/dash
|
||||
par_test_detected_shell test_known_shell_pipe fish Global::shell /usr/bin/fish
|
||||
par_test_detected_shell test_known_shell_pipe fizsh Global::shell /usr/bin/fizsh
|
||||
par_test_detected_shell test_known_shell_pipe ksh Global::shell /usr/bin/ksh
|
||||
par_test_detected_shell test_known_shell_pipe ksh93 Global::shell /usr/bin/ksh93
|
||||
par_test_detected_shell test_known_shell_pipe mksh Global::shell /usr/bin/mksh
|
||||
par_test_detected_shell test_known_shell_pipe posh Global::shell /usr/bin/posh
|
||||
par_test_detected_shell test_known_shell_pipe rbash Global::shell /usr/bin/rbash
|
||||
par_test_detected_shell test_known_shell_pipe rzsh Global::shell /usr/bin/rzsh
|
||||
par_test_detected_shell test_known_shell_pipe sash Global::shell /usr/bin/sh
|
||||
par_test_detected_shell test_known_shell_pipe sh Global::shell /usr/bin/sh
|
||||
par_test_detected_shell test_known_shell_pipe static-sh Global::shell /usr/bin/static-sh
|
||||
par_test_detected_shell test_known_shell_pipe tcsh Global::shell /usr/bin/tcsh
|
||||
par_test_detected_shell test_known_shell_pipe yash Global::shell /usr/bin/yash
|
||||
par_test_detected_shell test_known_shell_pipe zsh Global::shell /usr/bin/zsh
|
||||
par_test_diff_roundrobin_k ### test there is difference on -k
|
||||
par_test_diff_roundrobin_k OK
|
||||
par_test_ipv6_format ### Host as IPv6 address
|
||||
|
|
|
@ -51,10 +51,7 @@ par_continuous_output 1
|
|||
par_continuous_output 1
|
||||
par_continuous_output 1
|
||||
par_continuous_output 1
|
||||
par_hostgroup ### --hostgroup force ncpu
|
||||
par_hostgroup parallel
|
||||
par_hostgroup tange
|
||||
par_hostgroup ### --hostgroup two group arg
|
||||
par_hostgroup ### --hostgroup force ncpu - 2x parallel, 6x me
|
||||
par_hostgroup parallel
|
||||
par_hostgroup parallel
|
||||
par_hostgroup tange
|
||||
|
@ -63,7 +60,16 @@ par_hostgroup tange
|
|||
par_hostgroup tange
|
||||
par_hostgroup tange
|
||||
par_hostgroup tange
|
||||
par_hostgroup ### --hostgroup one group arg
|
||||
par_hostgroup ### --hostgroup two group arg - 2x parallel, 6x me
|
||||
par_hostgroup parallel
|
||||
par_hostgroup parallel
|
||||
par_hostgroup tange
|
||||
par_hostgroup tange
|
||||
par_hostgroup tange
|
||||
par_hostgroup tange
|
||||
par_hostgroup tange
|
||||
par_hostgroup tange
|
||||
par_hostgroup ### --hostgroup one group arg - 8x me
|
||||
par_hostgroup tange
|
||||
par_hostgroup tange
|
||||
par_hostgroup tange
|
||||
|
@ -72,7 +78,7 @@ par_hostgroup tange
|
|||
par_hostgroup tange
|
||||
par_hostgroup tange
|
||||
par_hostgroup tange
|
||||
par_hostgroup ### --hostgroup multiple group arg + unused group
|
||||
par_hostgroup ### --hostgroup multiple group arg + unused group - 2x parallel, 6x me, 0x tcsh
|
||||
par_hostgroup parallel
|
||||
par_hostgroup tange
|
||||
par_hostgroup ### --hostgroup two groups @
|
||||
|
@ -87,17 +93,17 @@ par_hostgroup implicit_group
|
|||
par_hostgroup ### --hostgroup --sshlogin with @
|
||||
par_hostgroup no_group
|
||||
par_hostgroup implicit_group
|
||||
par_hostgroup ### --hostgroup -S @group
|
||||
par_hostgroup ### --hostgroup -S @group - bad if you get parallel@lo
|
||||
par_hostgroup tange
|
||||
par_hostgroup tcsh
|
||||
par_hostgroup ### --hostgroup -S @group1 -Sgrp2
|
||||
par_hostgroup ### --hostgroup -S @group1 -Sgrp2 - get all twice
|
||||
par_hostgroup parallel
|
||||
par_hostgroup parallel
|
||||
par_hostgroup tange
|
||||
par_hostgroup tange
|
||||
par_hostgroup tcsh
|
||||
par_hostgroup tcsh
|
||||
par_hostgroup ### --hostgroup -S @group1+grp2
|
||||
par_hostgroup ### --hostgroup -S @group1+grp2 - get all twice
|
||||
par_hostgroup parallel
|
||||
par_hostgroup parallel
|
||||
par_hostgroup tange
|
||||
|
|
Loading…
Reference in a new issue