mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-11-22 14:07:55 +00:00
parallel: --tty re-fixed.
This commit is contained in:
parent
f8467c9a6b
commit
a04e3e6740
37
src/parallel
37
src/parallel
|
@ -7651,6 +7651,25 @@ sub start {
|
||||||
::set_fh_non_blocking($stdin_fh);
|
::set_fh_non_blocking($stdin_fh);
|
||||||
}
|
}
|
||||||
$job->set_fh(0,"w",$stdin_fh);
|
$job->set_fh(0,"w",$stdin_fh);
|
||||||
|
} elsif ($opt::tty and not $Global::tty_taken and -c "/dev/tty" and
|
||||||
|
open(my $devtty_fh, "<", "/dev/tty")) {
|
||||||
|
# Give /dev/tty to the command if no one else is using it
|
||||||
|
# The eval is needed to catch exception from open3
|
||||||
|
local (*IN,*OUT,*ERR);
|
||||||
|
open OUT, '>&', $stdout_fh or ::die_bug("Can't dup STDOUT: $!");
|
||||||
|
open ERR, '>&', $stderr_fh or ::die_bug("Can't dup STDERR: $!");
|
||||||
|
*IN = $devtty_fh;
|
||||||
|
# The eval is needed to catch exception from open3
|
||||||
|
my @wrap = ('perl','-e',
|
||||||
|
"eval\{setpriority\(0,0,$opt::nice\)\}\;".
|
||||||
|
"exec '$Global::shell', '-c', \@ARGV");
|
||||||
|
eval {
|
||||||
|
$pid = ::open3("<&IN", ">&OUT", ">&ERR", @wrap, $command)
|
||||||
|
|| ::die_bug("open3-/dev/tty");
|
||||||
|
1;
|
||||||
|
};
|
||||||
|
$Global::tty_taken = $pid;
|
||||||
|
close $devtty_fh;
|
||||||
} elsif(@opt::a and not $Global::stdin_in_opt_a and $job->seq() == 1
|
} elsif(@opt::a and not $Global::stdin_in_opt_a and $job->seq() == 1
|
||||||
and $job->sshlogin()->string() eq ":") {
|
and $job->sshlogin()->string() eq ":") {
|
||||||
# Give STDIN to the first job if using -a (but only if running
|
# Give STDIN to the first job if using -a (but only if running
|
||||||
|
@ -7672,24 +7691,6 @@ sub start {
|
||||||
open(STDIN, "<&", $Global::original_stdin)
|
open(STDIN, "<&", $Global::original_stdin)
|
||||||
or ::die_bug("dup-\$Global::original_stdin: $!");
|
or ::die_bug("dup-\$Global::original_stdin: $!");
|
||||||
|
|
||||||
} elsif ($opt::tty and not $Global::tty_taken and -c "/dev/tty" and
|
|
||||||
open(my $devtty_fh, "<", "/dev/tty")) {
|
|
||||||
# Give /dev/tty to the command if no one else is using it
|
|
||||||
# The eval is needed to catch exception from open3
|
|
||||||
eval {
|
|
||||||
no warnings;
|
|
||||||
local (*IN) = $devtty_fh;
|
|
||||||
local (*OUT,*ERR);
|
|
||||||
open OUT, '>&', $stdout_fh or ::die_bug("Can't dup STDOUT: $!");
|
|
||||||
open ERR, '>&', $stderr_fh or ::die_bug("Can't dup STDERR: $!");
|
|
||||||
$pid = ::open3("<&IN", ">&OUT", ">&ERR",
|
|
||||||
"exec $Global::shell -c ".
|
|
||||||
::shell_quote_scalar($command)) ||
|
|
||||||
::die_bug("open3-/dev/tty");
|
|
||||||
$Global::tty_taken = $pid;
|
|
||||||
close $devtty_fh;
|
|
||||||
1;
|
|
||||||
};
|
|
||||||
} else {
|
} else {
|
||||||
$pid = open3_setpgrp(::gensym(),$stdout_fh,$stderr_fh,$command);
|
$pid = open3_setpgrp(::gensym(),$stdout_fh,$stderr_fh,$command);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue