Released as 20210522 ('Gaza')

This commit is contained in:
Ole Tange 2021-05-23 01:18:09 +02:00
parent 9654be02dc
commit 70732f3290
25 changed files with 105 additions and 96 deletions

29
NEWS
View file

@ -1,3 +1,32 @@
20210522
New in this release:
* --plus includes {%%regexp} and {##regexp}.
* Bug fixes and man page updates.
News about GNU Parallel:
* Batch Calculate and Verify MD5 Checksum With GNU Parallel
https://omicx.cc/posts/2021-04-28-calculate-and-verify-md5-checksum-with-gnu-parallel/
* HerrComp Gnu parallel, c++11 threads 2021 04 28
https://www.youtube.com/watch?v=wDd9F9nn0qA
* Distributing embarrassingly parallel tasks GNU Parallel
https://ulhpc-tutorials.readthedocs.io/en/latest/sequential/gnu-parallel/
* Job Parallelization on Niagara
https://www.maryamdaryalal.com/post/job-parallelization-on-niagara
* Use Parallel to split by line
https://madflex.de/use-parallel-to-split-by-line/
* m1 multi-core batch convert with gpu parallel + ffmpeg
https://www.youtube.com/watch?v=hAuc0YsXv6A
20210422
New in this release:

24
README
View file

@ -57,11 +57,11 @@ document.
Full installation of GNU Parallel is as simple as:
wget https://ftpmirror.gnu.org/parallel/parallel-20210422.tar.bz2
wget https://ftpmirror.gnu.org/parallel/parallel-20210422.tar.bz2.sig
gpg parallel-20210422.tar.bz2.sig
bzip2 -dc parallel-20210422.tar.bz2 | tar xvf -
cd parallel-20210422
wget https://ftpmirror.gnu.org/parallel/parallel-20210522.tar.bz2
wget https://ftpmirror.gnu.org/parallel/parallel-20210522.tar.bz2.sig
gpg parallel-20210522.tar.bz2.sig
bzip2 -dc parallel-20210522.tar.bz2 | tar xvf -
cd parallel-20210522
./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-20210422.tar.bz2
wget https://ftpmirror.gnu.org/parallel/parallel-20210422.tar.bz2.sig
gpg parallel-20210422.tar.bz2.sig
bzip2 -dc parallel-20210422.tar.bz2 | tar xvf -
cd parallel-20210422
wget https://ftpmirror.gnu.org/parallel/parallel-20210522.tar.bz2
wget https://ftpmirror.gnu.org/parallel/parallel-20210522.tar.bz2.sig
gpg parallel-20210522.tar.bz2.sig
bzip2 -dc parallel-20210522.tar.bz2 | tar xvf -
cd parallel-20210522
./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. (2021, April 22). GNU Parallel 20210422 ('Ever Given').
Zenodo. https://doi.org/10.5281/zenodo.4710607
Tange, O. (2021, May 22). GNU Parallel 20210522 ('Gaza').
Zenodo. https://doi.org/10.5281/zenodo.4781603
Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015,
2016, 2017, 2018, 2019, 2020, 2021 Ole Tange, http://ole.tange.dk and

20
configure vendored
View file

@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for parallel 20210422.
# Generated by GNU Autoconf 2.69 for parallel 20210522.
#
# Report bugs to <bug-parallel@gnu.org>.
#
@ -579,8 +579,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='parallel'
PACKAGE_TARNAME='parallel'
PACKAGE_VERSION='20210422'
PACKAGE_STRING='parallel 20210422'
PACKAGE_VERSION='20210522'
PACKAGE_STRING='parallel 20210522'
PACKAGE_BUGREPORT='bug-parallel@gnu.org'
PACKAGE_URL=''
@ -1214,7 +1214,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 20210422 to adapt to many kinds of systems.
\`configure' configures parallel 20210522 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@ -1281,7 +1281,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of parallel 20210422:";;
short | recursive ) echo "Configuration of parallel 20210522:";;
esac
cat <<\_ACEOF
@ -1357,7 +1357,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
parallel configure 20210422
parallel configure 20210522
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@ -1374,7 +1374,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 20210422, which was
It was created by parallel $as_me 20210522, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@ -2237,7 +2237,7 @@ fi
# Define the identity of the package.
PACKAGE='parallel'
VERSION='20210422'
VERSION='20210522'
cat >>confdefs.h <<_ACEOF
@ -2880,7 +2880,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 20210422, which was
This file was extended by parallel $as_me 20210522, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@ -2942,7 +2942,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
parallel config.status 20210422
parallel config.status 20210522
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"

View file

@ -1,4 +1,4 @@
AC_INIT([parallel], [20210422], [bug-parallel@gnu.org])
AC_INIT([parallel], [20210522], [bug-parallel@gnu.org])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([

View file

@ -4,7 +4,6 @@
Quote of the month:
Parallel is amazing!
-- fatboy93@reddit
@ -15,10 +14,6 @@ Quote of the month:
I'm glad I don't have to implement multi-threaded Python scripts on the regular.
-- Fredrick Brennan @fr_brennan@twitter
If you work with lots of files at once
Take a good look at GNU parallel
Change your life for the better
-- French @notareverser@twitter
@GnuParallel the best thing ever and it's not up for debate #EOchat
-- Nathan Thomas @DrNASApants@twitter
@ -126,6 +121,11 @@ https://negfeedback.blogspot.com/2020/05/indispensable-command-line-tools.html
=== Used ===
If you work with lots of files at once
Take a good look at GNU parallel
Change your life for the better
-- French @notareverser@twitter
GNU Parallel is your friend.
Can shorten that time by X cores.
-- iRODS @irods@twitter

View file

@ -88,7 +88,7 @@ https://build.opensuse.org/package/show/home:tange/parallel
== Upload LBRY ==
lbry://@GnuParallel#4/parallel-20210322#4
lbry://@GnuParallel#4/parallel-20210322.tar.bz2
An easy way to support GNU Parallel is to tip on LBRY.
@ -241,7 +241,7 @@ from:tange@gnu.org
to:parallel@gnu.org, bug-parallel@gnu.org
stable-bcc: Jesse Alama <jessealama@fastmail.fm>
Subject: GNU Parallel 20210522 ('Palestine/Lag Ba'Omer celebrations at Mt. Meron Israel/Michael Collins <<>>') released <<[stable]>>
Subject: GNU Parallel 20210522 ('Gaza/Lag Ba'Omer celebrations at Mt. Meron Israel/Michael Collins <<>>') released <<[stable]>>
GNU Parallel 20210522 ('<<>>') <<[stable]>> has been released. It is available for download at: lbry://@GnuParallel:4
@ -257,19 +257,18 @@ Quote of the month:
New in this release:
* --plus includes {%%regexp} and {##regexp}.
* Bug fixes and man page updates.
News about GNU Parallel:
* Batch Calculate and Verify MD5 Checksum With GNU Parallel https://omicx.cc/posts/2021-04-28-calculate-and-verify-md5-checksum-with-gnu-parallel/
* HerrComp Gnu parallel, c++11 threads 2021 04 28 https://www.youtube.com/watch?v=wDd9F9nn0qA
news??https://ulhpc-tutorials.readthedocs.io/en/latest/sequential/gnu-parallel/
news?https://edbennett.github.io/high-performance-python/04-gnu-parallel/index.html
https://www.maryamdaryalal.com/post/job-parallelization-on-niagara
https://omicx.cc/posts/2021-04-28-calculate-and-verify-md5-checksum-with-gnu-parallel/
https://madflex.de/use-parallel-to-split-by-line/
* Distributing embarrassingly parallel tasks GNU Parallel https://ulhpc-tutorials.readthedocs.io/en/latest/sequential/gnu-parallel/
* Job Parallelization on Niagara https://www.maryamdaryalal.com/post/job-parallelization-on-niagara
* Use Parallel to split by line https://madflex.de/use-parallel-to-split-by-line/
* m1 multi-core batch convert with gpu parallel + ffmpeg https://www.youtube.com/watch?v=hAuc0YsXv6A
<<>>

View file

@ -1,7 +1,7 @@
<directory name="parallel" rev="308" vrev="1" srcmd5="823c6225d48d631ed7390d29b4ae789a">
<entry name="PKGBUILD" md5="2a3ef4282bfa239677f68f7b6dc14090" size="936" mtime="1619106347" />
<entry name="parallel-20210422.tar.bz2" md5="2c467364d5b8d70f2cb272c987518dc7" size="2239130" mtime="1619106348" />
<entry name="parallel.spec" md5="2720ff83f2292608800633f4b6437aa5" size="5630" mtime="1619106348" />
<entry name="parallel_20210422.dsc" md5="d2560ad0bc0c2cdb461bd997d4bfcd89" size="556" mtime="1619106348" />
<entry name="parallel_20210422.tar.gz" md5="9a9a0d863b1a6520d09a79c95a6ae7e5" size="2481859" mtime="1619106348" />
<directory name="parallel" rev="309" vrev="1" srcmd5="2b3abd269c145b2b6f9c8f5c621f0a2c">
<entry name="PKGBUILD" md5="8968befcd044ed0420f4cba10e888979" size="936" mtime="1621714283" />
<entry name="parallel-20210522.tar.bz2" md5="e5dae00759499a6249bfce0ea3db6c27" size="2246800" mtime="1621714283" />
<entry name="parallel.spec" md5="d75be8b4ac0fcdc53e79987905c17dab" size="5630" mtime="1621714284" />
<entry name="parallel_20210522.dsc" md5="1333cd608f0d2c2c713e03dc42a88b0f" size="556" mtime="1621714284" />
<entry name="parallel_20210522.tar.gz" md5="7dd347b3a538b439da031e94e2c6a5eb" size="2486960" mtime="1621714284" />
</directory>

View file

@ -1,7 +1,7 @@
Summary: Shell tool for executing jobs in parallel
Name: parallel
Version: 20210422
Version: 20210522
Release: 1.3
License: GPL-3.0-or-later
Group: Productivity/File utilities

View file

@ -385,7 +385,7 @@ _parset_main() {
return 255
fi
if [ "$_parset_NAME" = "--version" ] ; then
echo "parset 20210423 (GNU parallel `parallel --minversion 1`)"
echo "parset 20210522 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2021 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>"

View file

@ -391,7 +391,7 @@ _parset_main() {
return 255
fi
if [ "$_parset_NAME" = "--version" ] ; then
echo "parset 20210423 (GNU parallel `parallel --minversion 1`)"
echo "parset 20210522 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2021 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>"

View file

@ -385,7 +385,7 @@ _parset_main() {
return 255
fi
if [ "$_parset_NAME" = "--version" ] ; then
echo "parset 20210423 (GNU parallel `parallel --minversion 1`)"
echo "parset 20210522 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2021 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>"

View file

@ -368,7 +368,7 @@ _parset_main() {
return 255
fi
if [ "$_parset_NAME" = "--version" ] ; then
echo "parset 20210423 (GNU parallel `parallel --minversion 1`)"
echo "parset 20210522 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2021 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>"

View file

@ -371,7 +371,7 @@ _parset_main() {
return 255
fi
if [ "$_parset_NAME" = "--version" ] ; then
echo "parset 20210423 (GNU parallel `parallel --minversion 1`)"
echo "parset 20210522 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2021 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>"

View file

@ -390,7 +390,7 @@ _parset_main() {
return 255
fi
if [ "$_parset_NAME" = "--version" ] ; then
echo "parset 20210423 (GNU parallel `parallel --minversion 1`)"
echo "parset 20210522 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2021 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>"

View file

@ -362,7 +362,7 @@ _parset_main() {
return 255
fi
if [ "$_parset_NAME" = "--version" ] ; then
echo "parset 20210423 (GNU parallel `parallel --minversion 1`)"
echo "parset 20210522 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2021 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>"

View file

@ -26,7 +26,7 @@
use strict;
use Getopt::Long;
$Global::progname="niceload";
$Global::version = 20210423;
$Global::version = 20210522;
Getopt::Long::Configure("bundling","require_order");
get_options_from_array(\@ARGV) || die_usage();
if($opt::version) {

View file

@ -2187,7 +2187,7 @@ sub check_invalid_option_combinations() {
sub init_globals() {
# Defaults:
$Global::version = 20210423;
$Global::version = 20210522;
$Global::progname = 'parallel';
$::name = "GNU Parallel";
$Global::infinity = 2**31;
@ -2246,7 +2246,7 @@ sub init_globals() {
# echo {##z.*z.} ::: z.z.z.foo => foo
# Bash ${a#bc}
'{#([^#}][^}]*?)}' =>
'$nongreedy=::make_regexp_ungreedy($$1);s/^$nongreedy(.*)/$1/;',
'$nongreedy=::make_regexp_ungreedy($$1);s/^$nongreedy(.*)/$1/;',
# Bash ${a##bc}
'{##([^#}][^}]*?)}' => 's/^$$1//;',
# echo {%.z.*z} ::: foo.z.z.z => foo.z
@ -4992,8 +4992,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. (2021, April 22). GNU Parallel 20210422 ('Ever Given').",
" Zenodo. https://doi.org/10.5281/zenodo.4710607",
" Tange, O. (2021, May 22). GNU Parallel 20210522 ('Gaza').",
" Zenodo. https://doi.org/10.5281/zenodo.4781603",
"",
# Before changing this line, please read
# https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice
@ -5023,8 +5023,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. (2021, April 22). GNU Parallel 20210422 ('Ever Given').",
" Zenodo. https://doi.org/10.5281/zenodo.4710607",
" Tange, O. (2021, May 22). GNU Parallel 20210522 ('Gaza').",
" Zenodo. https://doi.org/10.5281/zenodo.4781603",
"",
# Before changing this line, please read
# https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice and
@ -5147,20 +5147,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_2021_4710607,",
"\@software{tange_2021_4781603,",
" author = {Tange, Ole},",
" title = {GNU Parallel 20210422 ('Ever Given')},",
" month = Apr,",
" title = {GNU Parallel 20210522 ('Gaza')},",
" month = May,",
" year = 2021,",
" 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.4710607},",
" url = {https://doi.org/10.5281/zenodo.4710607}",
" doi = {10.5281/zenodo.4781603},",
" url = {https://doi.org/10.5281/zenodo.4781603}",
"}",
"",
"(Feel free to use \\nocite{tange_2021_4710607})",
"(Feel free to use \\nocite{tange_2021_4781603})",
"",
# Before changing this line, please read
# https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice and

View file

@ -121,7 +121,7 @@ GetOptions(
"help" => \$opt::dummy,
) || exit(255);
$Global::progname = ($0 =~ m:(^|/)([^/]+)$:)[1];
$Global::version = 20210423;
$Global::version = 20210522;
if($opt::version) { version(); exit 0; }
@Global::sortoptions =
shell_quote(@ARGV_before[0..($#ARGV_before-$#ARGV-1)]);

View file

@ -600,7 +600,7 @@ $Global::Initfile && unlink $Global::Initfile;
exit ($err);
sub parse_options {
$Global::version = 20210423;
$Global::version = 20210522;
$Global::progname = 'sql';
# This must be done first as this may exec myself

View file

@ -351,9 +351,9 @@ par_disk_full() {
sudo umount -l smalldisk.img
dd if=/dev/zero of=smalldisk.img bs=100k count=1k
yes|mkfs smalldisk.img
sudo mkdir -p /mnt/ram
sudo mount smalldisk.img /mnt/ram
sudo chmod 777 /mnt/ram
sudo mkdir -p $SMALLDISK
sudo mount smalldisk.img $SMALLDISK
sudo chmod 777 $SMALLDISK
) >/dev/null 2>/dev/null
cat /dev/zero >$SMALLDISK/out

View file

@ -33,7 +33,9 @@ cat >/tmp/parallel-script-for-script <<EOF
echo 3 | parallel --tty -k -P 1 -n 1 -a /tmp/files cat -
EOF
chmod 755 /tmp/parallel-script-for-script
echo via pseudotty | script -q -f -c /tmp/parallel-script-for-script /dev/null
echo via pseudotty |
script -q -f -c /tmp/parallel-script-for-script /dev/null |
perl -ne '/tange| .*/ or print'
sleep 1
echo 'xargs Expect: 1 3'
@ -44,7 +46,9 @@ cat >/tmp/parallel-script-for-script2 <<EOF
echo 3 | parallel --tty -k -I {} -P 1 -n 1 -a /tmp/files cat {} -
EOF
chmod 755 /tmp/parallel-script-for-script2
echo via pseudotty | script -q -f -c /tmp/parallel-script-for-script2 /dev/null
echo via pseudotty |
script -q -f -c /tmp/parallel-script-for-script2 /dev/null |
perl -ne '/tange| .*/ or print'
sleep 1
echo '### Test stdin goes to first command only ("cat" as argument)'

View file

@ -6,7 +6,7 @@
TMP=/run/shm/parallel_$$
#rsync -Ha --delete input-files/testdir/ $TMP/
rsync -Ha --delete input-files/testdir/ $TMP/
mkdir -p $TMP
cd $TMP/

View file

@ -19,11 +19,6 @@ echo '### Test \0 as recend';
printf "a\0b\0c\0" | $NICEPAR --recend '\0' -k -N1 --pipe cat -v \; echo;
printf "\0a\0b\0c" | $NICEPAR --recstart '\0' -k -N1 --pipe cat -v \; echo
echo '### Test filenames containing UTF-8';
cd tmp;
find . -name '*.jpg' | $NICEPAR -j +0 convert -geometry 120 {} {//}/thumb_{/};
find |grep -v CVS | sort;
echo '### bug #39554: Feature request: line buffered output';
parallel -j0 --linebuffer 'echo -n start {};sleep 0.{#};echo middle -n {};sleep 1.{#}5;echo next to last {};sleep 1.{#};echo -n last {}' ::: A B C
echo

View file

@ -8,8 +8,6 @@ Academic tradition requires you to cite works you base your article on.
If you use programs that use GNU Parallel to process data for an article in a
scientific publication, please cite:
Tange, O. (2021, April 22). GNU Parallel 20210422 ('Ever Given').
Zenodo. https://doi.org/10.5281/zenodo.4710607
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.
@ -30,8 +28,6 @@ Academic tradition requires you to cite works you base your article on.
If you use programs that use GNU Parallel to process data for an article in a
scientific publication, please cite:
Tange, O. (2021, April 22). GNU Parallel 20210422 ('Ever Given').
Zenodo. https://doi.org/10.5281/zenodo.4710607
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.

View file

@ -10,21 +10,7 @@ c^@
^@a
^@b
^@c
echo '### Test filenames containing UTF-8'; cd tmp; find . -name '*.jpg' | $NICEPAR -j +0 convert -geometry 120 {} {//}/thumb_{/}; find |grep -v CVS | sort; echo '### bug #39554: Feature request: line buffered output'; parallel -j0 --linebuffer 'echo -n start {};sleep 0.{#};echo middle -n {};sleep 1.{#}5;echo next to last {};sleep 1.{#};echo -n last {}' ::: A B C
### Test filenames containing UTF-8
.
./1-col.txt
./2-col.txt
./a
./a/bar
./a/foo
./a/foo2
./b
./b/bar
./b/foo
./中国 (Zhōngguó)
./中国 (Zhōngguó)/China's (中国) road.jpg
./中国 (Zhōngguó)/thumb_China's (中国) road.jpg
echo '### bug #39554: Feature request: line buffered output'; parallel -j0 --linebuffer 'echo -n start {};sleep 0.{#};echo middle -n {};sleep 1.{#}5;echo next to last {};sleep 1.{#};echo -n last {}' ::: A B C
### bug #39554: Feature request: line buffered output
start Amiddle -n A
start Bmiddle -n B