mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-11-27 19:53:36 +08:00
f6bba5ceb4
I am not sure why this worked, actually. These tests did not have $fish set anywhere, and on my fresh OpenBSD VM it ended up calling whatever that calls "fish" (I think it's that "Go fish!" game?).
71 lines
2.3 KiB
Fish
71 lines
2.3 KiB
Fish
# RUN: env fth=%fish_test_helper fish=%fish %fish %s
|
|
|
|
status job-control full
|
|
|
|
# Ensure that lots of nested jobs all end up in the same pgroup.
|
|
|
|
function save_pgroup -a var_name
|
|
$fth print_pgrp | read -g $var_name
|
|
end
|
|
|
|
# Here everything should live in the pgroup of the first fish_test_helper.
|
|
$fth print_pgrp | read -g global_group | save_pgroup g1 | begin
|
|
save_pgroup g2
|
|
end | begin
|
|
echo (save_pgroup g3) >/dev/null
|
|
end
|
|
|
|
[ "$global_group" -eq "$g1" ] && [ "$g1" -eq "$g2" ] && [ "$g2" -eq "$g3" ]
|
|
and echo "All pgroups agreed"
|
|
or echo "Pgroups disagreed. Should be in $global_group but found $g1, $g2, $g3"
|
|
# CHECK: All pgroups agreed
|
|
|
|
# Here everything should live in fish's pgroup.
|
|
# Unfortunately we don't know what fish's pgroup is (it may not be fish's pid).
|
|
# So run it twice and verify that everything agrees; this implies that it could
|
|
# not have used any of the pids of the child procs.
|
|
function nothing
|
|
end
|
|
nothing | $fth print_pgrp | read -g a0 | save_pgroup a1 | begin
|
|
save_pgroup a2
|
|
end
|
|
nothing | $fth print_pgrp | read -g b0 | save_pgroup b1 | begin
|
|
save_pgroup b2
|
|
end
|
|
|
|
[ "$a0" -eq "$a1" ] && [ "$a1" -eq "$a2" ] \
|
|
&& [ "$b0" -eq "$b1" ] && [ "$b1" -eq "$b2" ] \
|
|
&& [ "$a0" -eq "$b0" ]
|
|
and echo "All pgroups agreed"
|
|
or echo "Pgroups disagreed. Found $a0 $a1 $a2, and $b0 $b1 $b2"
|
|
# CHECK: All pgroups agreed
|
|
|
|
# Ensure that eval retains pgroups - #6806.
|
|
set -l tmpfile1 (mktemp)
|
|
set -l tmpfile2 (mktemp)
|
|
$fth print_pgrp > $tmpfile1 | eval '$fth print_pgrp > $tmpfile2'
|
|
read -l pgrp1 < $tmpfile1
|
|
read -l pgrp2 < $tmpfile2
|
|
[ "$pgrp1" -eq "$pgrp2" ]
|
|
and echo "eval pgroups agreed"
|
|
or echo "eval pgroups disagreed, meaning eval does not retain pgroups: $pgrp1 $pgrp2"
|
|
# CHECK: eval pgroups agreed
|
|
echo -n > $tmpfile1
|
|
echo -n > $tmpfile2
|
|
|
|
# Ensure that if a background job launches another background job, that they have different pgroups.
|
|
# Our regex will capture the first pgroup and use a negative lookahead on the second.
|
|
status job-control full
|
|
$fth print_pgrp > $tmpfile1 | begin
|
|
$fth print_pgrp > $tmpfile2 &
|
|
wait
|
|
end &
|
|
wait
|
|
read -l pgrp1 < $tmpfile1
|
|
read -l pgrp2 < $tmpfile2
|
|
[ "$pgrp1" -ne "$pgrp2" ]
|
|
and echo "background job correctly got new pgroup"
|
|
or echo "background job did not get new pgroup: $pgrp1 $pgrp2"
|
|
# CHECK: background job correctly got new pgroup
|
|
rm $tmpfile1 $tmpfile2
|