mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-11-22 05:57:54 +00:00
Implemented --cat and --fifo.
This commit is contained in:
parent
a74c5c316f
commit
1be2d7568c
12
README
12
README
|
@ -40,9 +40,9 @@ document.
|
||||||
|
|
||||||
Full installation of GNU Parallel is as simple as:
|
Full installation of GNU Parallel is as simple as:
|
||||||
|
|
||||||
wget http://ftpmirror.gnu.org/parallel/parallel-20140322.tar.bz2
|
wget http://ftpmirror.gnu.org/parallel/parallel-20140323.tar.bz2
|
||||||
bzip2 -dc parallel-20140322.tar.bz2 | tar xvf -
|
bzip2 -dc parallel-20140323.tar.bz2 | tar xvf -
|
||||||
cd parallel-20140322
|
cd parallel-20140323
|
||||||
./configure && make && make install
|
./configure && make && make install
|
||||||
|
|
||||||
|
|
||||||
|
@ -51,9 +51,9 @@ Full installation of GNU Parallel is as simple as:
|
||||||
If you are not root you can add ~/bin to your path and install in
|
If you are not root you can add ~/bin to your path and install in
|
||||||
~/bin and ~/share:
|
~/bin and ~/share:
|
||||||
|
|
||||||
wget http://ftpmirror.gnu.org/parallel/parallel-20140322.tar.bz2
|
wget http://ftpmirror.gnu.org/parallel/parallel-20140323.tar.bz2
|
||||||
bzip2 -dc parallel-20140322.tar.bz2 | tar xvf -
|
bzip2 -dc parallel-20140323.tar.bz2 | tar xvf -
|
||||||
cd parallel-20140322
|
cd parallel-20140323
|
||||||
./configure --prefix=$HOME && make && make install
|
./configure --prefix=$HOME && make && make install
|
||||||
|
|
||||||
Or if your system lacks 'make' you can simply copy src/parallel
|
Or if your system lacks 'make' you can simply copy src/parallel
|
||||||
|
|
20
configure
vendored
20
configure
vendored
|
@ -1,6 +1,6 @@
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Guess values for system-dependent variables and create Makefiles.
|
# Guess values for system-dependent variables and create Makefiles.
|
||||||
# Generated by GNU Autoconf 2.69 for parallel 20140322.
|
# Generated by GNU Autoconf 2.69 for parallel 20140323.
|
||||||
#
|
#
|
||||||
# Report bugs to <bug-parallel@gnu.org>.
|
# Report bugs to <bug-parallel@gnu.org>.
|
||||||
#
|
#
|
||||||
|
@ -579,8 +579,8 @@ MAKEFLAGS=
|
||||||
# Identity of this package.
|
# Identity of this package.
|
||||||
PACKAGE_NAME='parallel'
|
PACKAGE_NAME='parallel'
|
||||||
PACKAGE_TARNAME='parallel'
|
PACKAGE_TARNAME='parallel'
|
||||||
PACKAGE_VERSION='20140322'
|
PACKAGE_VERSION='20140323'
|
||||||
PACKAGE_STRING='parallel 20140322'
|
PACKAGE_STRING='parallel 20140323'
|
||||||
PACKAGE_BUGREPORT='bug-parallel@gnu.org'
|
PACKAGE_BUGREPORT='bug-parallel@gnu.org'
|
||||||
PACKAGE_URL=''
|
PACKAGE_URL=''
|
||||||
|
|
||||||
|
@ -1194,7 +1194,7 @@ if test "$ac_init_help" = "long"; then
|
||||||
# Omit some internal or obsolete options to make the list less imposing.
|
# 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.
|
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||||
cat <<_ACEOF
|
cat <<_ACEOF
|
||||||
\`configure' configures parallel 20140322 to adapt to many kinds of systems.
|
\`configure' configures parallel 20140323 to adapt to many kinds of systems.
|
||||||
|
|
||||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||||
|
|
||||||
|
@ -1260,7 +1260,7 @@ fi
|
||||||
|
|
||||||
if test -n "$ac_init_help"; then
|
if test -n "$ac_init_help"; then
|
||||||
case $ac_init_help in
|
case $ac_init_help in
|
||||||
short | recursive ) echo "Configuration of parallel 20140322:";;
|
short | recursive ) echo "Configuration of parallel 20140323:";;
|
||||||
esac
|
esac
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
|
|
||||||
|
@ -1327,7 +1327,7 @@ fi
|
||||||
test -n "$ac_init_help" && exit $ac_status
|
test -n "$ac_init_help" && exit $ac_status
|
||||||
if $ac_init_version; then
|
if $ac_init_version; then
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
parallel configure 20140322
|
parallel configure 20140323
|
||||||
generated by GNU Autoconf 2.69
|
generated by GNU Autoconf 2.69
|
||||||
|
|
||||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||||
|
@ -1344,7 +1344,7 @@ cat >config.log <<_ACEOF
|
||||||
This file contains any messages produced by compilers while
|
This file contains any messages produced by compilers while
|
||||||
running configure, to aid debugging if configure makes a mistake.
|
running configure, to aid debugging if configure makes a mistake.
|
||||||
|
|
||||||
It was created by parallel $as_me 20140322, which was
|
It was created by parallel $as_me 20140323, which was
|
||||||
generated by GNU Autoconf 2.69. Invocation command line was
|
generated by GNU Autoconf 2.69. Invocation command line was
|
||||||
|
|
||||||
$ $0 $@
|
$ $0 $@
|
||||||
|
@ -2159,7 +2159,7 @@ fi
|
||||||
|
|
||||||
# Define the identity of the package.
|
# Define the identity of the package.
|
||||||
PACKAGE='parallel'
|
PACKAGE='parallel'
|
||||||
VERSION='20140322'
|
VERSION='20140323'
|
||||||
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
@ -2710,7 +2710,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
||||||
# report actual input values of CONFIG_FILES etc. instead of their
|
# report actual input values of CONFIG_FILES etc. instead of their
|
||||||
# values after options handling.
|
# values after options handling.
|
||||||
ac_log="
|
ac_log="
|
||||||
This file was extended by parallel $as_me 20140322, which was
|
This file was extended by parallel $as_me 20140323, which was
|
||||||
generated by GNU Autoconf 2.69. Invocation command line was
|
generated by GNU Autoconf 2.69. Invocation command line was
|
||||||
|
|
||||||
CONFIG_FILES = $CONFIG_FILES
|
CONFIG_FILES = $CONFIG_FILES
|
||||||
|
@ -2772,7 +2772,7 @@ _ACEOF
|
||||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||||
ac_cs_version="\\
|
ac_cs_version="\\
|
||||||
parallel config.status 20140322
|
parallel config.status 20140323
|
||||||
configured by $0, generated by GNU Autoconf 2.69,
|
configured by $0, generated by GNU Autoconf 2.69,
|
||||||
with options \\"\$ac_cs_config\\"
|
with options \\"\$ac_cs_config\\"
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
AC_INIT([parallel], [20140322], [bug-parallel@gnu.org])
|
AC_INIT([parallel], [20140323], [bug-parallel@gnu.org])
|
||||||
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
|
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
|
||||||
AC_CONFIG_HEADERS([config.h])
|
AC_CONFIG_HEADERS([config.h])
|
||||||
AC_CONFIG_FILES([
|
AC_CONFIG_FILES([
|
||||||
|
|
|
@ -156,6 +156,9 @@ git diff
|
||||||
|
|
||||||
git commit -a
|
git commit -a
|
||||||
|
|
||||||
|
Released as 20140X22 ('').
|
||||||
|
|
||||||
|
|
||||||
== Update Savannah ==
|
== Update Savannah ==
|
||||||
|
|
||||||
Content from release mail:
|
Content from release mail:
|
||||||
|
@ -191,8 +194,7 @@ file:///home/tange/privat/parallel/doc/release_new_version
|
||||||
|
|
||||||
from:tange@gnu.org
|
from:tange@gnu.org
|
||||||
to:parallel@gnu.org, bug-parallel@gnu.org
|
to:parallel@gnu.org, bug-parallel@gnu.org
|
||||||
cc:Sandro Cazzaniga <kharec@mandriva.org>,
|
cc:Tim Cuthbertson <tim3d.junk@gmail.com>,
|
||||||
Tim Cuthbertson <tim3d.junk@gmail.com>,
|
|
||||||
Ludovic Courtès <ludo@gnu.org>, Markus Ammer <mkmm@gmx-topmail.de>,
|
Ludovic Courtès <ludo@gnu.org>, Markus Ammer <mkmm@gmx-topmail.de>,
|
||||||
Pavel Nuzhdin <pnzhdin@gmail.com>, Phil Sung <psung@alum.mit.edu>,
|
Pavel Nuzhdin <pnzhdin@gmail.com>, Phil Sung <psung@alum.mit.edu>,
|
||||||
Michael Shigorin <mike@altlinux.org>,
|
Michael Shigorin <mike@altlinux.org>,
|
||||||
|
@ -215,25 +217,9 @@ No new functionality was introduced so this is a good candidate for a stable rel
|
||||||
|
|
||||||
New in this release:
|
New in this release:
|
||||||
|
|
||||||
* Offical package for Alpine Linux now exists: http://alpinelinux.org/apk/main/x86/parallel
|
* How to run tbss_2_reg in parallel http://tadpolebrainimaging.blogspot.dk/2014/03/how-to-run-tbss2reg-in-parallel.html
|
||||||
|
|
||||||
* GNU Parallel was cited in: Estimating uncertainties in statistics computed from direct numerical simulation http://dx.doi.org/10.1063/1.4866813
|
* Iterative DNS Brute Forcing http://www.room362.com/blog/2014/02/19/iterative-dns-brute-forcing/
|
||||||
|
|
||||||
* GNU Parallel was cited in: Vehicle routing problems with time windows and multiple service workers: a systematic comparison between ACO and GRASP http://link.springer.com/article/10.1007/s10100-014-0341-z
|
|
||||||
|
|
||||||
* GNU Parallel, quick and easy http://www.reganmian.net/blog/2014/03/09/gnu-parallel-quick-and-easy/
|
|
||||||
|
|
||||||
* Using Multiple CPU Cores With Command Line Tools http://prateekvjoshi.com/2014/03/07/using-multiple-cpu-cores-with-command-line-tools/
|
|
||||||
|
|
||||||
* Batch convert mp3 CBR to VBR http://blogs.zercle.com/bouroo/2013/03/batch-convert-mp3-cbr-to-vbr/
|
|
||||||
|
|
||||||
* Running Behat in parallel with Selenium grid http://zalas.eu/running-behat-in-parallel-with-selenium-grid/
|
|
||||||
|
|
||||||
* Git-Mirror per cronjob aktuell halten https://www.schtobia.de/2013/git-mirror-per-cronjob-aktuell-halten/
|
|
||||||
|
|
||||||
* Пишем многопоточный скрипт на bash http://dafter.ru/duf/howto/130.html
|
|
||||||
|
|
||||||
* 如何利用多核CPU来加速你的Linux命令 http://www.chinadmd.com/file/xpcr6wpctzwtuu3ivwiaatcs_1.html
|
|
||||||
|
|
||||||
* Bug fixes and man page updates.
|
* Bug fixes and man page updates.
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
use strict;
|
use strict;
|
||||||
use Getopt::Long;
|
use Getopt::Long;
|
||||||
$Global::progname="niceload";
|
$Global::progname="niceload";
|
||||||
$Global::version = 20140322;
|
$Global::version = 20140323;
|
||||||
Getopt::Long::Configure("bundling","require_order");
|
Getopt::Long::Configure("bundling","require_order");
|
||||||
get_options_from_array(\@ARGV) || die_usage();
|
get_options_from_array(\@ARGV) || die_usage();
|
||||||
if($opt::version) {
|
if($opt::version) {
|
||||||
|
|
34
src/parallel
34
src/parallel
|
@ -588,6 +588,8 @@ sub options_hash {
|
||||||
"Y" => \$opt::retired,
|
"Y" => \$opt::retired,
|
||||||
"skip-first-line" => \$opt::skip_first_line,
|
"skip-first-line" => \$opt::skip_first_line,
|
||||||
"header=s" => \$opt::header,
|
"header=s" => \$opt::header,
|
||||||
|
"cat" => \$opt::cat,
|
||||||
|
"fifo" => \$opt::fifo,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -628,7 +630,7 @@ sub get_options_from_array {
|
||||||
sub parse_options {
|
sub parse_options {
|
||||||
# Returns: N/A
|
# Returns: N/A
|
||||||
# Defaults:
|
# Defaults:
|
||||||
$Global::version = 20140322;
|
$Global::version = 20140323;
|
||||||
$Global::progname = 'parallel';
|
$Global::progname = 'parallel';
|
||||||
$Global::infinity = 2**31;
|
$Global::infinity = 2**31;
|
||||||
$Global::debug = 0;
|
$Global::debug = 0;
|
||||||
|
@ -5252,6 +5254,16 @@ sub populate {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $next_arg;
|
my $next_arg;
|
||||||
my $max_len = $Global::minimal_command_line_length || Limits::Command::max_length();
|
my $max_len = $Global::minimal_command_line_length || Limits::Command::max_length();
|
||||||
|
|
||||||
|
if($opt::cat or $opt::fifo) {
|
||||||
|
# Get a tempfile name
|
||||||
|
my($outfh,$name) = ::tempfile(SUFFIX => ".pip");
|
||||||
|
close $outfh;
|
||||||
|
# Unlink is needed if: ssh otheruser@localhost
|
||||||
|
unlink $name;
|
||||||
|
$Global::JobQueue->{'commandlinequeue'}->{'arg_queue'}->unget([Arg->new($name)]);
|
||||||
|
}
|
||||||
|
|
||||||
while (not $self->{'arg_queue'}->empty()) {
|
while (not $self->{'arg_queue'}->empty()) {
|
||||||
$next_arg = $self->{'arg_queue'}->get();
|
$next_arg = $self->{'arg_queue'}->get();
|
||||||
if(not defined $next_arg) {
|
if(not defined $next_arg) {
|
||||||
|
@ -5577,7 +5589,25 @@ sub number_of_replacements {
|
||||||
sub replaced {
|
sub replaced {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
if(not defined $self->{'replaced'}) {
|
if(not defined $self->{'replaced'}) {
|
||||||
$self->{'replaced'} = $self->replace_placeholders($self->{'command'},$Global::JobQueue->quote_args());
|
if($opt::cat) {
|
||||||
|
# Prepend 'cat > {};'
|
||||||
|
# Append '_EXIT=$?;(rm {};exit $_EXIT)'
|
||||||
|
$self->{'replaced'} =
|
||||||
|
$self->replace_placeholders("cat > $Global::replace{'{}'}; ". $self->{'command'}.
|
||||||
|
"; _EXIT=\$?; rm $Global::replace{'{}'}; exit \$_EXIT",
|
||||||
|
$Global::JobQueue->quote_args());
|
||||||
|
} elsif($opt::fifo) {
|
||||||
|
# Prepend 'mkfifo {}; ('
|
||||||
|
# Append ') & _PID=$!; cat > {}; wait $_PID; _EXIT=$?;(rm {};exit $_EXIT)'
|
||||||
|
$self->{'replaced'} =
|
||||||
|
$self->replace_placeholders("mkfifo $Global::replace{'{}'}; (".
|
||||||
|
$self->{'command'}.
|
||||||
|
") & _PID=\$!; cat > $Global::replace{'{}'}; ".
|
||||||
|
"wait \$_PID; _EXIT=\$?; rm $Global::replace{'{}'}; exit \$_EXIT",
|
||||||
|
$Global::JobQueue->quote_args());
|
||||||
|
} else {
|
||||||
|
$self->{'replaced'} = $self->replace_placeholders($self->{'command'},$Global::JobQueue->quote_args());
|
||||||
|
}
|
||||||
if($self->{'replaced'} =~ /^\s*(-\S+)/) {
|
if($self->{'replaced'} =~ /^\s*(-\S+)/) {
|
||||||
# Is this really a command in $PATH starting with '-'?
|
# Is this really a command in $PATH starting with '-'?
|
||||||
my $cmd = $1;
|
my $cmd = $1;
|
||||||
|
|
|
@ -378,6 +378,16 @@ I<size> defaults to 1M.
|
||||||
See B<--pipe> for use of this.
|
See B<--pipe> for use of this.
|
||||||
|
|
||||||
|
|
||||||
|
=item B<--cat> (alpha testing)
|
||||||
|
|
||||||
|
Create a temporary file with content. Normally B<--pipe> will give
|
||||||
|
data to the program on stdin (standard input). With B<--cat> GNU
|
||||||
|
B<parallel> will create a temporary file with the name in {}, so you
|
||||||
|
can do: B<parallel --pipe --cat wc {}>.
|
||||||
|
|
||||||
|
See also B<--fifo>.
|
||||||
|
|
||||||
|
|
||||||
=item B<--cleanup>
|
=item B<--cleanup>
|
||||||
|
|
||||||
Remove transferred files. B<--cleanup> will remove the transferred files
|
Remove transferred files. B<--cleanup> will remove the transferred files
|
||||||
|
@ -526,6 +536,18 @@ See also B<--bg>, B<man sem>.
|
||||||
Implies B<--semaphore>.
|
Implies B<--semaphore>.
|
||||||
|
|
||||||
|
|
||||||
|
=item B<--fifo> (alpha testing)
|
||||||
|
|
||||||
|
Create a temporary fifo with content. Normally B<--pipe> will give
|
||||||
|
data to the program on stdin (standard input). With B<--fifo> GNU
|
||||||
|
B<parallel> will create a temporary fifo with the name in {}, so you
|
||||||
|
can do: B<parallel --pipe --fifo wc {}>.
|
||||||
|
|
||||||
|
Beware: If data is not read from the fifo, the job will block forever.
|
||||||
|
|
||||||
|
See also B<--cat>.
|
||||||
|
|
||||||
|
|
||||||
=item B<--filter-hosts>
|
=item B<--filter-hosts>
|
||||||
|
|
||||||
Remove down hosts. For each remote host: check that login through ssh
|
Remove down hosts. For each remote host: check that login through ssh
|
||||||
|
|
|
@ -397,6 +397,16 @@ than a single record.
|
||||||
|
|
||||||
See @strong{--pipe} for use of this.
|
See @strong{--pipe} for use of this.
|
||||||
|
|
||||||
|
@item @strong{--cat} (alpha testing)
|
||||||
|
@anchor{@strong{--cat} (alpha testing)}
|
||||||
|
|
||||||
|
Create a temporary file with content. Normally @strong{--pipe} will give
|
||||||
|
data to the program on stdin (standard input). With @strong{--cat} GNU
|
||||||
|
@strong{parallel} will create a temporary file with the name in @{@}, so you
|
||||||
|
can do: @strong{parallel --pipe --cat wc @{@}}.
|
||||||
|
|
||||||
|
See also @strong{--fifo}.
|
||||||
|
|
||||||
@item @strong{--cleanup}
|
@item @strong{--cleanup}
|
||||||
@anchor{@strong{--cleanup}}
|
@anchor{@strong{--cleanup}}
|
||||||
|
|
||||||
|
@ -553,6 +563,16 @@ See also @strong{--bg}, @strong{man sem}.
|
||||||
|
|
||||||
Implies @strong{--semaphore}.
|
Implies @strong{--semaphore}.
|
||||||
|
|
||||||
|
@item @strong{--fifo} (alpha testing)
|
||||||
|
@anchor{@strong{--fifo} (alpha testing)}
|
||||||
|
|
||||||
|
Create a temporary fifo with content. Normally @strong{--pipe} will give
|
||||||
|
data to the program on stdin (standard input). With @strong{--fifo} GNU
|
||||||
|
@strong{parallel} will create a temporary fifo with the name in @{@}, so you
|
||||||
|
can do: @strong{parallel --pipe --fifo wc @{@}}.
|
||||||
|
|
||||||
|
See also @strong{--cat}.
|
||||||
|
|
||||||
@item @strong{--filter-hosts}
|
@item @strong{--filter-hosts}
|
||||||
@anchor{@strong{--filter-hosts}}
|
@anchor{@strong{--filter-hosts}}
|
||||||
|
|
||||||
|
|
|
@ -124,7 +124,7 @@
|
||||||
.\" ========================================================================
|
.\" ========================================================================
|
||||||
.\"
|
.\"
|
||||||
.IX Title "PARALLEL_TUTORIAL 1"
|
.IX Title "PARALLEL_TUTORIAL 1"
|
||||||
.TH PARALLEL_TUTORIAL 1 "2014-01-25" "20140322" "parallel"
|
.TH PARALLEL_TUTORIAL 1 "2014-01-25" "20140323" "parallel"
|
||||||
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
|
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
|
||||||
.\" way too many mistakes in technical documents.
|
.\" way too many mistakes in technical documents.
|
||||||
.if n .ad l
|
.if n .ad l
|
||||||
|
|
2
src/sql
2
src/sql
|
@ -556,7 +556,7 @@ $Global::Initfile && unlink $Global::Initfile;
|
||||||
exit ($err);
|
exit ($err);
|
||||||
|
|
||||||
sub parse_options {
|
sub parse_options {
|
||||||
$Global::version = 20140322;
|
$Global::version = 20140323;
|
||||||
$Global::progname = 'sql';
|
$Global::progname = 'sql';
|
||||||
|
|
||||||
# This must be done first as this may exec myself
|
# This must be done first as this may exec myself
|
||||||
|
|
Loading…
Reference in a new issue