mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-11-25 15:37:56 +00:00
parallel: Better parent_shell detection.
This commit is contained in:
parent
f2b403b7fb
commit
9b2012f021
52
src/parallel
52
src/parallel
|
@ -1163,12 +1163,12 @@ sub parse_options {
|
||||||
$Global::debug = $opt::D;
|
$Global::debug = $opt::D;
|
||||||
$Global::shell = $ENV{'PARALLEL_SHELL'} || parent_shell($$)
|
$Global::shell = $ENV{'PARALLEL_SHELL'} || parent_shell($$)
|
||||||
|| $ENV{'SHELL'} || "/bin/sh";
|
|| $ENV{'SHELL'} || "/bin/sh";
|
||||||
if(not which($Global::shell)) {
|
if(not -x $Global::shell and not which($Global::shell)) {
|
||||||
::error("Shell '$Global::shell' not found.");
|
::error("Shell '$Global::shell' not found.");
|
||||||
wait_and_exit(255);
|
wait_and_exit(255);
|
||||||
}
|
}
|
||||||
$Global::cshell = $Global::shell =~ m:/csh:;
|
::debug("init","Global::shell $Global::shell\n");
|
||||||
|
$Global::cshell = $Global::shell =~ m:(/[-a-z]*)?csh:;
|
||||||
if(defined $opt::X) { $Global::ContextReplace = 1; }
|
if(defined $opt::X) { $Global::ContextReplace = 1; }
|
||||||
if(defined $opt::silent) { $Global::verbose = 0; }
|
if(defined $opt::silent) { $Global::verbose = 0; }
|
||||||
if(defined $opt::null) { $/ = "\0"; }
|
if(defined $opt::null) { $/ = "\0"; }
|
||||||
|
@ -2252,7 +2252,7 @@ sub shell_quote_scalar {
|
||||||
# Speed optimization: Choose the correct shell_quote_scalar_*
|
# Speed optimization: Choose the correct shell_quote_scalar_*
|
||||||
# and call that directly from now on
|
# and call that directly from now on
|
||||||
no warnings 'redefine';
|
no warnings 'redefine';
|
||||||
if($Global::shell =~ m:(^|/)t?csh$:) {
|
if($Global::cshell) {
|
||||||
# (t)csh
|
# (t)csh
|
||||||
*shell_quote_scalar = \&shell_quote_scalar_csh;
|
*shell_quote_scalar = \&shell_quote_scalar_csh;
|
||||||
} elsif($Global::shell =~ m:(^|/)rc$:) {
|
} elsif($Global::shell =~ m:(^|/)rc$:) {
|
||||||
|
@ -4776,7 +4776,7 @@ sub which {
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
my ($regexp,%fakename);
|
my ($regexp,$shell,%fakename);
|
||||||
|
|
||||||
sub parent_shell {
|
sub parent_shell {
|
||||||
# Input:
|
# Input:
|
||||||
|
@ -4784,13 +4784,15 @@ sub which {
|
||||||
# Returns:
|
# Returns:
|
||||||
# $shellpath = path to shell - undef if no shell found
|
# $shellpath = path to shell - undef if no shell found
|
||||||
my $pid = shift;
|
my $pid = shift;
|
||||||
|
::debug("init","Parent of $pid\n");
|
||||||
if(not $regexp) {
|
if(not $regexp) {
|
||||||
# All shells known to mankind
|
# All shells known to mankind
|
||||||
#
|
#
|
||||||
# ash bash csh dash fdsh fish fizsh ksh ksh93 mksh pdksh
|
# ash bash csh dash fdsh fish fizsh ksh ksh93 mksh pdksh
|
||||||
# posh rbash rc rush rzsh sash sh static-sh tcsh yash zsh
|
# posh rbash rc rush rzsh sash sh static-sh tcsh yash zsh
|
||||||
my @shells = (qw(ash bash csh dash fdsh fish fizsh ksh
|
|
||||||
ksh93 lksh mksh pdksh posh rbash rc rush rzsh sash sh
|
my @shells = (qw(ash bash bsd-csh csh dash fdsh fish fizsh
|
||||||
|
ksh ksh93 lksh mksh pdksh posh rbash rc rush rzsh sash sh
|
||||||
static-sh tcsh yash zsh -sh -csh -bash),
|
static-sh tcsh yash zsh -sh -csh -bash),
|
||||||
'-sh (sh)' # sh on FreeBSD
|
'-sh (sh)' # sh on FreeBSD
|
||||||
);
|
);
|
||||||
|
@ -4798,26 +4800,50 @@ sub which {
|
||||||
# [sh] -sh sh busybox sh -sh (sh)
|
# [sh] -sh sh busybox sh -sh (sh)
|
||||||
# /bin/sh /sbin/sh /opt/csw/sh
|
# /bin/sh /sbin/sh /opt/csw/sh
|
||||||
# But not: foo.sh sshd crash flush pdflush scosh fsflush ssh
|
# But not: foo.sh sshd crash flush pdflush scosh fsflush ssh
|
||||||
my $shell = "(?:".join("|",map { "\Q$_\E" } @shells).")";
|
$shell = "(?:".join("|",map { "\Q$_\E" } @shells).")";
|
||||||
$regexp = '^((\[)('. $shell. ')(\])|(|\S+/|busybox )('. $shell. '))( *$| [^(])';
|
$regexp = '^((\[)(-?)('. $shell. ')(\])|(|\S+/|busybox )'.
|
||||||
|
'(-?)('. $shell. '))( *$| [^(])';
|
||||||
%fakename = (
|
%fakename = (
|
||||||
# sh disguises itself as -sh (sh) on FreeBSD
|
# sh disguises itself as -sh (sh) on FreeBSD
|
||||||
"-sh (sh)" => ["sh"],
|
"-sh (sh)" => ["sh"],
|
||||||
# csh and tcsh disguise themselves as -sh/-csh
|
# csh and tcsh disguise themselves as -sh/-csh
|
||||||
"-sh" => ["csh", "tcsh"],
|
# E.g.: ssh -tt csh@lo 'ps aux;true' |egrep ^csh
|
||||||
|
# but sh also disguise itself as -sh
|
||||||
|
# (When?)
|
||||||
|
"-sh" => ["sh"],
|
||||||
"-csh" => ["tcsh", "csh"],
|
"-csh" => ["tcsh", "csh"],
|
||||||
|
# ash disguises itself as -ash
|
||||||
|
"-ash" => ["ash", "dash", "sh"],
|
||||||
|
# dash disguises itself as -dash
|
||||||
|
"-dash" => ["dash", "ash", "sh"],
|
||||||
# bash disguises itself as -bash
|
# bash disguises itself as -bash
|
||||||
"-bash" => ["bash", "sh"],
|
"-bash" => ["bash", "sh"],
|
||||||
|
# ksh disguises itself as -ash
|
||||||
|
"-ksh" => ["ksh", "sh"],
|
||||||
|
# zsh disguises itself as -zsh
|
||||||
|
"-zsh" => ["zsh", "sh"],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
# if -sh or -csh try readlink /proc/$$/exe
|
||||||
my ($children_of_ref, $parent_of_ref, $name_of_ref) = pid_table();
|
my ($children_of_ref, $parent_of_ref, $name_of_ref) = pid_table();
|
||||||
my $shellpath;
|
my $shellpath;
|
||||||
my $testpid = $pid;
|
my $testpid = $pid;
|
||||||
while($testpid) {
|
while($testpid) {
|
||||||
::debug("init", "shell? ". $name_of_ref->{$testpid}."\n");
|
|
||||||
if($name_of_ref->{$testpid} =~ /$regexp/o) {
|
if($name_of_ref->{$testpid} =~ /$regexp/o) {
|
||||||
::debug("init", "which ".($3||$6)." => ");
|
my $shellname = $4 || $8;
|
||||||
$shellpath = (which($3 || $6,@{$fakename{$3 || $6}}))[0];
|
my $dash = $3 || $7;
|
||||||
|
if($shellname eq "sh" and $dash) {
|
||||||
|
# -sh => csh or sh
|
||||||
|
if($shellpath = readlink "/proc/$testpid/exe") {
|
||||||
|
::debug("init","procpath $shellpath\n");
|
||||||
|
if($shellpath =~ m:/$shell$:o) {
|
||||||
|
::debug("init", "proc which ".$shellpath." => ");
|
||||||
|
return $shellpath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
::debug("init", "which ".$shellname." => ");
|
||||||
|
$shellpath = (which($shellname,@{$fakename{$shellname}}))[0];
|
||||||
::debug("init", "shell path $shellpath\n");
|
::debug("init", "shell path $shellpath\n");
|
||||||
$shellpath and last;
|
$shellpath and last;
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,9 +96,10 @@ dir that makes most sense for the sysadmin.
|
||||||
|
|
||||||
=head3 env_parallel.bash / env_parallel.zsh / env_parallel.ksh / env_parallel.pdksh
|
=head3 env_parallel.bash / env_parallel.zsh / env_parallel.ksh / env_parallel.pdksh
|
||||||
|
|
||||||
B<env_parallel.(bash|ksh|pdksh|zsh)> sets the function B<env_parallel>. It uses
|
B<env_parallel.(bash|ksh|pdksh|zsh)> defines the function
|
||||||
B<alias> and B<typeset> to dump the configuration (with a few
|
B<env_parallel>. It uses B<alias> and B<typeset> to dump the
|
||||||
exceptions) into B<$PARALLEL_ENV> before running GNU B<parallel>.
|
configuration (with a few exceptions) into B<$PARALLEL_ENV> before
|
||||||
|
running GNU B<parallel>.
|
||||||
|
|
||||||
After GNU B<parallel> is finished, B<$PARALLEL_ENV> is deleted.
|
After GNU B<parallel> is finished, B<$PARALLEL_ENV> is deleted.
|
||||||
|
|
||||||
|
@ -735,6 +736,49 @@ not known to B<bash>.
|
||||||
If GNU B<parallel> guesses wrong in these situation, set the shell using
|
If GNU B<parallel> guesses wrong in these situation, set the shell using
|
||||||
B<$PARALLEL_SHELL>.
|
B<$PARALLEL_SHELL>.
|
||||||
|
|
||||||
|
|
||||||
|
=head2 Always running commands in a shell
|
||||||
|
|
||||||
|
If the command is a simple command with no redirection and setting of
|
||||||
|
variables, the command I<could> be run without spawning a shell. E.g.:
|
||||||
|
|
||||||
|
parallel "grep -E 'a|bc' {}" ::: foo
|
||||||
|
|
||||||
|
could be run as:
|
||||||
|
|
||||||
|
system("grep","-E","a|bc","foo");
|
||||||
|
|
||||||
|
However, as soon as the command is a bit more complex a shell I<must>
|
||||||
|
be spawned:
|
||||||
|
|
||||||
|
parallel "grep -E 'a|bc' {} | wc" ::: foo
|
||||||
|
|
||||||
|
It is impossible to tell the difference between these two without
|
||||||
|
parsing the string (is the B<|> a pipe in shell or an alternation in
|
||||||
|
B<grep>?).
|
||||||
|
|
||||||
|
On top of this wrapper scripts will often require a shell to be
|
||||||
|
spawned.
|
||||||
|
|
||||||
|
The downside is that you need to quote special shell chars twice:
|
||||||
|
|
||||||
|
parallel echo '*' ::: This will expand the asterisk
|
||||||
|
parallel echo "'*'" ::: This will not
|
||||||
|
parallel "echo '*'" ::: This will not
|
||||||
|
parallel echo '\*' ::: This will not
|
||||||
|
parallel echo \''*'\' ::: This will not
|
||||||
|
parallel -q echo '*' ::: This will not
|
||||||
|
|
||||||
|
B<-q> will quote all special chars, thus redirection will not work:
|
||||||
|
this prints '* > out.1' and I<does not> save '*' into the file out.1:
|
||||||
|
|
||||||
|
parallel -q echo "*" ">" out.{} ::: 1
|
||||||
|
|
||||||
|
GNU B<parallel> tries to live up to Principle Of Least Astonishment
|
||||||
|
(POLA), and the requirement of using B<-q> is hard to understand, when
|
||||||
|
you do not see the whole picture.
|
||||||
|
|
||||||
|
|
||||||
=head2 Quoting
|
=head2 Quoting
|
||||||
|
|
||||||
Quoting depends on the shell. For most shells \ is used for all
|
Quoting depends on the shell. For most shells \ is used for all
|
||||||
|
|
|
@ -129,12 +129,6 @@ parallel -k echo {#} ::: 1 2 ::: 1 2
|
||||||
|
|
||||||
echo '**'
|
echo '**'
|
||||||
|
|
||||||
testquote() { printf '"#&/\n()*=?'"'" | PARALLEL_SHELL=$1 parallel -0 echo; };
|
|
||||||
export -f testquote;
|
|
||||||
parallel --tag -k testquote ::: ash bash csh dash fdsh fish fizsh ksh ksh93 mksh posh rbash rc rzsh sash sh static-sh tcsh yash zsh
|
|
||||||
|
|
||||||
echo '**'
|
|
||||||
|
|
||||||
echo '### bug #45769: --round-robin --pipepart gives wrong results'
|
echo '### bug #45769: --round-robin --pipepart gives wrong results'
|
||||||
|
|
||||||
seq 10000 >/tmp/seq10000;
|
seq 10000 >/tmp/seq10000;
|
||||||
|
@ -797,6 +791,16 @@ par_results() {
|
||||||
rm /tmp/$$.csv
|
rm /tmp/$$.csv
|
||||||
}
|
}
|
||||||
|
|
||||||
|
par_testquote() {
|
||||||
|
testquote() {
|
||||||
|
printf '"#&/\n()*=?'"'" |
|
||||||
|
PARALLEL_SHELL=$1 parallel -0 echo
|
||||||
|
}
|
||||||
|
export -f testquote
|
||||||
|
parallel --tag -k testquote ::: ash bash csh dash fdsh fish fizsh ksh ksh93 mksh posh rbash rc rzsh sash sh static-sh tcsh yash zsh
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
export -f $(compgen -A function | grep par_)
|
export -f $(compgen -A function | grep par_)
|
||||||
compgen -A function | grep par_ | sort |
|
compgen -A function | grep par_ | sort |
|
||||||
parallel -j6 --tag -k --joblog +/tmp/jl-`basename $0` '{} 2>&1'
|
parallel -j6 --tag -k --joblog +/tmp/jl-`basename $0` '{} 2>&1'
|
||||||
|
|
|
@ -306,6 +306,8 @@ par_retries_all_fail() {
|
||||||
parallel -k -j0 --retries 2 --timeout 0.1 'echo {}; sleep {}; false' 2>/dev/null
|
parallel -k -j0 --retries 2 --timeout 0.1 'echo {}; sleep {}; false' 2>/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export -f $(compgen -A function | grep par_)
|
export -f $(compgen -A function | grep par_)
|
||||||
compgen -A function | grep par_ | sort |
|
compgen -A function | grep par_ | sort |
|
||||||
parallel --joblog /tmp/jl-`basename $0` -j10 --tag -k '{} 2>&1'
|
parallel --joblog /tmp/jl-`basename $0` -j10 --tag -k '{} 2>&1'
|
||||||
|
|
|
@ -121,6 +121,38 @@ par_memfree() {
|
||||||
stdout parallel --timeout 20 --argsep II parallel --memfree 1t echo Free mem: ::: II 1t
|
stdout parallel --timeout 20 --argsep II parallel --memfree 1t echo Free mem: ::: II 1t
|
||||||
}
|
}
|
||||||
|
|
||||||
|
par_test_detected_shell() {
|
||||||
|
echo '### bug #42913: Dont use $SHELL but the shell currently running'
|
||||||
|
|
||||||
|
shells="ash bash csh dash fish fizsh ksh ksh93 mksh posh rbash rush rzsh sash sh static-sh tcsh yash zsh"
|
||||||
|
test_unknown_shell() {
|
||||||
|
shell="$1"
|
||||||
|
tmp="/tmp/test_unknown_shell_$shell"
|
||||||
|
cp $(which "$shell") "$tmp"
|
||||||
|
chmod +x "$tmp"
|
||||||
|
$tmp -c 'ppar -Dinit echo ::: 1; true' |
|
||||||
|
grep Global::shell
|
||||||
|
rm "$tmp"
|
||||||
|
}
|
||||||
|
export -f test_unknown_shell
|
||||||
|
|
||||||
|
test_known_shell_c() {
|
||||||
|
shell="$1"
|
||||||
|
$shell -c 'parallel -Dinit echo ::: 1; true' |
|
||||||
|
grep Global::shell
|
||||||
|
}
|
||||||
|
export -f test_known_shell_c
|
||||||
|
|
||||||
|
test_known_shell_pipe() {
|
||||||
|
shell="$1"
|
||||||
|
echo 'parallel -Dinit echo ::: 1; true' |
|
||||||
|
$shell | grep Global::shell
|
||||||
|
}
|
||||||
|
export -f test_known_shell_pipe
|
||||||
|
|
||||||
|
parallel -j0 --tag -k ::: test_unknown_shell test_known_shell_c test_known_shell_pipe ::: $shells
|
||||||
|
}
|
||||||
|
|
||||||
export -f $(compgen -A function | grep par_)
|
export -f $(compgen -A function | grep par_)
|
||||||
compgen -A function | grep par_ | sort |
|
compgen -A function | grep par_ | sort |
|
||||||
parallel -j0 --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1'
|
parallel -j0 --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1'
|
||||||
|
|
|
@ -8,4 +8,9 @@ echo '### See if we get compile error'
|
||||||
PATH=input-files/perllib:../input-files/perllib:$PATH
|
PATH=input-files/perllib:../input-files/perllib:$PATH
|
||||||
perl32 `which parallel` ::: 'echo perl'
|
perl32 `which parallel` ::: 'echo perl'
|
||||||
echo '### See if we read modules outside perllib'
|
echo '### See if we read modules outside perllib'
|
||||||
echo perl | stdout strace -ff perl32 `which parallel` echo | grep open | grep perl | grep -v input-files/perllib
|
echo perl |
|
||||||
|
stdout strace -ff perl32 `which parallel` echo |
|
||||||
|
grep open |
|
||||||
|
grep perl |
|
||||||
|
grep -v '] read(6' |
|
||||||
|
grep -v input-files/perllib
|
||||||
|
|
|
@ -71,26 +71,6 @@ echo '### bug #42902: profiles containing arguments with space'
|
||||||
echo '### bug #42892: parallel -a nonexiting --pipepart'
|
echo '### bug #42892: parallel -a nonexiting --pipepart'
|
||||||
parallel --pipepart -a nonexisting wc
|
parallel --pipepart -a nonexisting wc
|
||||||
|
|
||||||
echo '### bug #42913: Dont use $SHELL but the shell currently running'
|
|
||||||
echo '## Unknown shell => $SHELL (bash)'
|
|
||||||
parallel -kj1 "rm -f /tmp/SHELL; cp \`which {}\` /tmp/SHELL; /tmp/SHELL -c 'parallel -Dinit echo ::: 1' | grep which;"
|
|
||||||
::: ash bash csh dash fish fizsh ksh ksh93 mksh posh rbash rush rzsh sash sh static-sh tcsh yash zsh;
|
|
||||||
rm -f /tmp/SHELL /tmp/par*.par
|
|
||||||
|
|
||||||
echo '## Known shells -c'
|
|
||||||
parallel -k "\`which {}\` -c 'parallel -Dinit echo ::: 1' | grep which;"
|
|
||||||
::: ash bash csh dash fdsh fish fizsh ksh ksh93 mksh posh rbash rush rzsh sash sh static-sh tcsh yash zsh;
|
|
||||||
rm -f /tmp/par*.par
|
|
||||||
|
|
||||||
echo '## Known shells |'
|
|
||||||
parallel -k "echo 'parallel -Dinit echo ::: 1' | \`which {}\` | grep which;"
|
|
||||||
::: ash bash csh dash fdsh fish fizsh ksh ksh93 mksh posh rbash rush rzsh sash sh static-sh tcsh yash zsh;
|
|
||||||
rm -f /tmp/par*.par
|
|
||||||
|
|
||||||
echo '## Started directly from perl'
|
|
||||||
perl -e 'system(qw(parallel -Dinit echo ::: 1))' | grep which;
|
|
||||||
rm -f /tmp/par*.par
|
|
||||||
|
|
||||||
echo '### added transfersize/returnsize to local jobs'
|
echo '### added transfersize/returnsize to local jobs'
|
||||||
echo '### normal'
|
echo '### normal'
|
||||||
seq 100 111 | parallel --joblog /dev/stderr seq {} '|' pv -qL100 2>&1 >/dev/null | cut -f 5-7 | sort
|
seq 100 111 | parallel --joblog /dev/stderr seq {} '|' pv -qL100 2>&1 >/dev/null | cut -f 5-7 | sort
|
||||||
|
|
|
@ -164,49 +164,6 @@ parallel -k echo {#} ::: 1 2 ::: 1 2
|
||||||
4
|
4
|
||||||
echo '**'
|
echo '**'
|
||||||
**
|
**
|
||||||
testquote() { printf '"#&/\n()*=?'"'" | PARALLEL_SHELL=$1 parallel -0 echo; }; export -f testquote; parallel --tag -k testquote ::: ash bash csh dash fdsh fish fizsh ksh ksh93 mksh posh rbash rc rzsh sash sh static-sh tcsh yash zsh
|
|
||||||
ash "#&/
|
|
||||||
ash ()*=?'
|
|
||||||
bash "#&/
|
|
||||||
bash ()*=?'
|
|
||||||
csh "#&/
|
|
||||||
csh ()*=?'
|
|
||||||
dash "#&/
|
|
||||||
dash ()*=?'
|
|
||||||
fdsh "#&/
|
|
||||||
fdsh ()*=?'
|
|
||||||
fish "#&/
|
|
||||||
fish ()*=?'
|
|
||||||
fizsh "#&/
|
|
||||||
fizsh ()*=?'
|
|
||||||
ksh "#&/
|
|
||||||
ksh ()*=?'
|
|
||||||
ksh93 "#&/
|
|
||||||
ksh93 ()*=?'
|
|
||||||
mksh "#&/
|
|
||||||
mksh ()*=?'
|
|
||||||
posh "#&/
|
|
||||||
posh ()*=?'
|
|
||||||
rbash "#&/
|
|
||||||
rbash ()*=?'
|
|
||||||
rc "#&/
|
|
||||||
rc ()*=?'
|
|
||||||
rzsh "#&/
|
|
||||||
rzsh ()*=?'
|
|
||||||
sash "#&/
|
|
||||||
sash ()*=?'
|
|
||||||
sh "#&/
|
|
||||||
sh ()*=?'
|
|
||||||
static-sh "#&/
|
|
||||||
static-sh ()*=?'
|
|
||||||
tcsh "#&/
|
|
||||||
tcsh ()*=?'
|
|
||||||
yash "#&/
|
|
||||||
yash ()*=?'
|
|
||||||
zsh "#&/
|
|
||||||
zsh ()*=?'
|
|
||||||
echo '**'
|
|
||||||
**
|
|
||||||
echo '### bug #45769: --round-robin --pipepart gives wrong results'
|
echo '### bug #45769: --round-robin --pipepart gives wrong results'
|
||||||
### bug #45769: --round-robin --pipepart gives wrong results
|
### bug #45769: --round-robin --pipepart gives wrong results
|
||||||
seq 10000 >/tmp/seq10000; parallel -j2 --pipepart -a /tmp/seq10000 --block 14 --round-robin wc | wc -l; rm /tmp/seq10000
|
seq 10000 >/tmp/seq10000; parallel -j2 --pipepart -a /tmp/seq10000 --block 14 --round-robin wc | wc -l; rm /tmp/seq10000
|
||||||
|
@ -1575,6 +1532,46 @@ par_tee 4 -l 122853
|
||||||
par_tee 4 -c 815290
|
par_tee 4 -c 815290
|
||||||
par_tee 5 -l 122853
|
par_tee 5 -l 122853
|
||||||
par_tee 5 -c 815290
|
par_tee 5 -c 815290
|
||||||
|
par_testquote ash "#&/
|
||||||
|
par_testquote ash ()*=?'
|
||||||
|
par_testquote bash "#&/
|
||||||
|
par_testquote bash ()*=?'
|
||||||
|
par_testquote csh "#&/
|
||||||
|
par_testquote csh ()*=?'
|
||||||
|
par_testquote dash "#&/
|
||||||
|
par_testquote dash ()*=?'
|
||||||
|
par_testquote fdsh "#&/
|
||||||
|
par_testquote fdsh ()*=?'
|
||||||
|
par_testquote fish "#&/
|
||||||
|
par_testquote fish ()*=?'
|
||||||
|
par_testquote fizsh "#&/
|
||||||
|
par_testquote fizsh ()*=?'
|
||||||
|
par_testquote ksh "#&/
|
||||||
|
par_testquote ksh ()*=?'
|
||||||
|
par_testquote ksh93 "#&/
|
||||||
|
par_testquote ksh93 ()*=?'
|
||||||
|
par_testquote mksh "#&/
|
||||||
|
par_testquote mksh ()*=?'
|
||||||
|
par_testquote posh "#&/
|
||||||
|
par_testquote posh ()*=?'
|
||||||
|
par_testquote rbash "#&/
|
||||||
|
par_testquote rbash ()*=?'
|
||||||
|
par_testquote rc "#&/
|
||||||
|
par_testquote rc ()*=?'
|
||||||
|
par_testquote rzsh "#&/
|
||||||
|
par_testquote rzsh ()*=?'
|
||||||
|
par_testquote sash "#&/
|
||||||
|
par_testquote sash ()*=?'
|
||||||
|
par_testquote sh "#&/
|
||||||
|
par_testquote sh ()*=?'
|
||||||
|
par_testquote static-sh "#&/
|
||||||
|
par_testquote static-sh ()*=?'
|
||||||
|
par_testquote tcsh "#&/
|
||||||
|
par_testquote tcsh ()*=?'
|
||||||
|
par_testquote yash "#&/
|
||||||
|
par_testquote yash ()*=?'
|
||||||
|
par_testquote zsh "#&/
|
||||||
|
par_testquote zsh ()*=?'
|
||||||
par_tricolonplus ### bug #48745: :::+ bug
|
par_tricolonplus ### bug #48745: :::+ bug
|
||||||
par_tricolonplus 11 1 21 a aa
|
par_tricolonplus 11 1 21 a aa
|
||||||
par_tricolonplus 11 1 21 b bb
|
par_tricolonplus 11 1 21 b bb
|
||||||
|
|
|
@ -40,6 +40,67 @@ par_sigterm parallel: sleep 15; echo 6
|
||||||
par_sigterm parallel: sleep 15; echo 7
|
par_sigterm parallel: sleep 15; echo 7
|
||||||
par_sigterm parallel: sleep 15; echo 8
|
par_sigterm parallel: sleep 15; echo 8
|
||||||
par_sigterm parallel: sleep 15; echo 9
|
par_sigterm parallel: sleep 15; echo 9
|
||||||
|
par_test_detected_shell ### bug #42913: Dont use $SHELL but the shell currently running
|
||||||
|
par_test_detected_shell test_unknown_shell ash Global::shell /bin/bash
|
||||||
|
par_test_detected_shell test_unknown_shell bash Global::shell /bin/bash
|
||||||
|
par_test_detected_shell test_unknown_shell csh Global::shell /bin/bash
|
||||||
|
par_test_detected_shell test_unknown_shell dash Global::shell /bin/bash
|
||||||
|
par_test_detected_shell test_unknown_shell fish Global::shell /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 /bin/bash
|
||||||
|
par_test_detected_shell test_unknown_shell ksh93 Global::shell /bin/bash
|
||||||
|
par_test_detected_shell test_unknown_shell mksh Global::shell /bin/bash
|
||||||
|
par_test_detected_shell test_unknown_shell posh Global::shell /bin/bash
|
||||||
|
par_test_detected_shell test_unknown_shell rbash Global::shell /bin/bash
|
||||||
|
par_test_detected_shell test_unknown_shell rush Local configuration error occurred.
|
||||||
|
par_test_detected_shell test_unknown_shell rush Contact the systems administrator for further assistance.
|
||||||
|
par_test_detected_shell test_unknown_shell rzsh Global::shell /bin/bash
|
||||||
|
par_test_detected_shell test_unknown_shell sash Global::shell /bin/sh
|
||||||
|
par_test_detected_shell test_unknown_shell sh Global::shell /bin/bash
|
||||||
|
par_test_detected_shell test_unknown_shell static-sh test_unknown_shell_static-sh: applet not found
|
||||||
|
par_test_detected_shell test_unknown_shell tcsh Global::shell /bin/bash
|
||||||
|
par_test_detected_shell test_unknown_shell yash Global::shell /bin/bash
|
||||||
|
par_test_detected_shell test_unknown_shell zsh Global::shell /bin/bash
|
||||||
|
par_test_detected_shell test_known_shell_c ash Global::shell /bin/ash
|
||||||
|
par_test_detected_shell test_known_shell_c bash Global::shell /bin/bash
|
||||||
|
par_test_detected_shell test_known_shell_c csh Global::shell /bin/csh
|
||||||
|
par_test_detected_shell test_known_shell_c dash Global::shell /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 /bin/ksh93
|
||||||
|
par_test_detected_shell test_known_shell_c mksh Global::shell /bin/mksh
|
||||||
|
par_test_detected_shell test_known_shell_c posh Global::shell /bin/posh
|
||||||
|
par_test_detected_shell test_known_shell_c rbash Global::shell /bin/rbash
|
||||||
|
par_test_detected_shell test_known_shell_c rush Local configuration error occurred.
|
||||||
|
par_test_detected_shell test_known_shell_c rush Contact the systems administrator for further assistance.
|
||||||
|
par_test_detected_shell test_known_shell_c rzsh Global::shell /bin/rzsh
|
||||||
|
par_test_detected_shell test_known_shell_c sash Global::shell /bin/sh
|
||||||
|
par_test_detected_shell test_known_shell_c sh Global::shell /bin/sh
|
||||||
|
par_test_detected_shell test_known_shell_c static-sh Global::shell /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 ash Global::shell /bin/ash
|
||||||
|
par_test_detected_shell test_known_shell_pipe bash Global::shell /bin/bash
|
||||||
|
par_test_detected_shell test_known_shell_pipe csh Global::shell /bin/csh
|
||||||
|
par_test_detected_shell test_known_shell_pipe dash Global::shell /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/zsh
|
||||||
|
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 /bin/ksh93
|
||||||
|
par_test_detected_shell test_known_shell_pipe mksh Global::shell /bin/mksh
|
||||||
|
par_test_detected_shell test_known_shell_pipe posh Global::shell /bin/posh
|
||||||
|
par_test_detected_shell test_known_shell_pipe rbash Global::shell /bin/rbash
|
||||||
|
par_test_detected_shell test_known_shell_pipe rush Local configuration error occurred.
|
||||||
|
par_test_detected_shell test_known_shell_pipe rush Contact the systems administrator for further assistance.
|
||||||
|
par_test_detected_shell test_known_shell_pipe rzsh Global::shell /bin/rzsh
|
||||||
|
par_test_detected_shell test_known_shell_pipe sash Global::shell /bin/sh
|
||||||
|
par_test_detected_shell test_known_shell_pipe sh Global::shell /bin/sh
|
||||||
|
par_test_detected_shell test_known_shell_pipe static-sh Global::shell /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_tmp_full ### Test --tmpdir running full. bug #40733 was caused by this
|
par_tmp_full ### Test --tmpdir running full. bug #40733 was caused by this
|
||||||
par_tmp_full parallel: Error: Output is incomplete.
|
par_tmp_full parallel: Error: Output is incomplete.
|
||||||
par_tmp_full parallel: Error: Cannot append to buffer file in /tmp/shm/parallel.
|
par_tmp_full parallel: Error: Cannot append to buffer file in /tmp/shm/parallel.
|
||||||
|
|
|
@ -93,108 +93,6 @@ echo '### bug #42892: parallel -a nonexiting --pipepart'
|
||||||
### bug #42892: parallel -a nonexiting --pipepart
|
### bug #42892: parallel -a nonexiting --pipepart
|
||||||
parallel --pipepart -a nonexisting wc
|
parallel --pipepart -a nonexisting wc
|
||||||
parallel: Error: nonexisting is neither a file nor a block device
|
parallel: Error: nonexisting is neither a file nor a block device
|
||||||
echo '### bug #42913: Dont use $SHELL but the shell currently running'
|
|
||||||
### bug #42913: Dont use $SHELL but the shell currently running
|
|
||||||
echo '## Unknown shell => $SHELL (bash)'
|
|
||||||
## Unknown shell => $SHELL (bash)
|
|
||||||
parallel -kj1 "rm -f /tmp/SHELL; cp \`which {}\` /tmp/SHELL; /tmp/SHELL -c 'parallel -Dinit echo ::: 1' | grep which;" ::: ash bash csh dash fish fizsh ksh ksh93 mksh posh rbash rush rzsh sash sh static-sh tcsh yash zsh; rm -f /tmp/SHELL /tmp/par*.par
|
|
||||||
shell? /bin/bash -c rm -f /tmp/SHELL; cp `which ash` /tmp/SHELL; /tmp/SHELL -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
shell? /bin/bash -c rm -f /tmp/SHELL; cp `which bash` /tmp/SHELL; /tmp/SHELL -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
shell? /bin/bash -c rm -f /tmp/SHELL; cp `which csh` /tmp/SHELL; /tmp/SHELL -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
shell? /bin/bash -c rm -f /tmp/SHELL; cp `which dash` /tmp/SHELL; /tmp/SHELL -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
shell? /bin/bash -c rm -f /tmp/SHELL; cp `which fish` /tmp/SHELL; /tmp/SHELL -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
which zsh => shell path /usr/bin/zsh
|
|
||||||
shell? /bin/bash -c rm -f /tmp/SHELL; cp `which ksh` /tmp/SHELL; /tmp/SHELL -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
shell? /bin/bash -c rm -f /tmp/SHELL; cp `which ksh93` /tmp/SHELL; /tmp/SHELL -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
shell? /bin/bash -c rm -f /tmp/SHELL; cp `which mksh` /tmp/SHELL; /tmp/SHELL -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
shell? /bin/bash -c rm -f /tmp/SHELL; cp `which posh` /tmp/SHELL; /tmp/SHELL -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
shell? /bin/bash -c rm -f /tmp/SHELL; cp `which rbash` /tmp/SHELL; /tmp/SHELL -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
shell? /bin/bash -c rm -f /tmp/SHELL; cp `which rzsh` /tmp/SHELL; /tmp/SHELL -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
shell? /bin/bash -c rm -f /tmp/SHELL; cp `which sash` /tmp/SHELL; /tmp/SHELL -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
shell? /bin/bash -c rm -f /tmp/SHELL; cp `which sh` /tmp/SHELL; /tmp/SHELL -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
shell? /bin/bash -c rm -f /tmp/SHELL; cp `which tcsh` /tmp/SHELL; /tmp/SHELL -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
shell? /bin/bash -c rm -f /tmp/SHELL; cp `which yash` /tmp/SHELL; /tmp/SHELL -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
shell? /bin/bash -c rm -f /tmp/SHELL; cp `which zsh` /tmp/SHELL; /tmp/SHELL -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
Local configuration error occurred.
|
|
||||||
Contact the systems administrator for further assistance.
|
|
||||||
SHELL: applet not found
|
|
||||||
echo '## Known shells -c'
|
|
||||||
## Known shells -c
|
|
||||||
parallel -k "\`which {}\` -c 'parallel -Dinit echo ::: 1' | grep which;" ::: ash bash csh dash fdsh fish fizsh ksh ksh93 mksh posh rbash rush rzsh sash sh static-sh tcsh yash zsh; rm -f /tmp/par*.par
|
|
||||||
which ash => shell path /bin/ash
|
|
||||||
shell? /bin/bash -c `which bash` -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
which csh => shell path /bin/csh
|
|
||||||
which dash => shell path /bin/dash
|
|
||||||
which fdsh => shell path /usr/bin/fdsh
|
|
||||||
which fish => shell path /usr/bin/fish
|
|
||||||
which zsh => shell path /usr/bin/zsh
|
|
||||||
shell? /bin/bash -c `which ksh` -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
shell? /bin/bash -c `which ksh93` -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
shell? /bin/bash -c `which mksh` -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
which posh => shell path /bin/posh
|
|
||||||
shell? /bin/bash -c `which rbash` -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
shell? /bin/bash -c `which rzsh` -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
which sash => shell path /bin/sash
|
|
||||||
which sh => shell path /bin/sh
|
|
||||||
which static-sh => shell path /bin/static-sh
|
|
||||||
which tcsh => shell path /usr/bin/tcsh
|
|
||||||
shell? /bin/bash -c `which yash` -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
shell? /bin/bash -c `which zsh` -c 'parallel -Dinit echo ::: 1' | grep which;
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
Local configuration error occurred.
|
|
||||||
Contact the systems administrator for further assistance.
|
|
||||||
echo '## Known shells |'
|
|
||||||
## Known shells |
|
|
||||||
parallel -k "echo 'parallel -Dinit echo ::: 1' | \`which {}\` | grep which;" ::: ash bash csh dash fdsh fish fizsh ksh ksh93 mksh posh rbash rush rzsh sash sh static-sh tcsh yash zsh; rm -f /tmp/par*.par
|
|
||||||
which ash => shell path /bin/ash
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
which csh => shell path /bin/csh
|
|
||||||
which dash => shell path /bin/dash
|
|
||||||
which fdsh => shell path /usr/bin/fdsh
|
|
||||||
which fish => shell path /usr/bin/fish
|
|
||||||
which zsh => shell path /usr/bin/zsh
|
|
||||||
which ksh => shell path /usr/bin/ksh
|
|
||||||
which ksh93 => shell path /bin/ksh93
|
|
||||||
which mksh => shell path /bin/mksh
|
|
||||||
which posh => shell path /bin/posh
|
|
||||||
which rbash => shell path /bin/rbash
|
|
||||||
which rzsh => shell path /bin/rzsh
|
|
||||||
which sash => shell path /bin/sash
|
|
||||||
which sh => shell path /bin/sh
|
|
||||||
which static-sh => shell path /bin/static-sh
|
|
||||||
which tcsh => shell path /usr/bin/tcsh
|
|
||||||
which yash => shell path /usr/bin/yash
|
|
||||||
which zsh => shell path /usr/bin/zsh
|
|
||||||
Local configuration error occurred.
|
|
||||||
Contact the systems administrator for further assistance.
|
|
||||||
echo '## Started directly from perl'
|
|
||||||
## Started directly from perl
|
|
||||||
perl -e 'system(qw(parallel -Dinit echo ::: 1))' | grep which; rm -f /tmp/par*.par
|
|
||||||
shell? /bin/bash -c perl -e 'system(qw(parallel -Dinit echo ::: 1))' | grep which; rm -f /tmp/par*.par
|
|
||||||
which bash => shell path /bin/bash
|
|
||||||
echo '### added transfersize/returnsize to local jobs'
|
echo '### added transfersize/returnsize to local jobs'
|
||||||
### added transfersize/returnsize to local jobs
|
### added transfersize/returnsize to local jobs
|
||||||
echo '### normal'
|
echo '### normal'
|
||||||
|
|
Loading…
Reference in a new issue