mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-11-25 18:03:37 +08:00
2ca66cff53
This disables job control inside command substitutions. Prior to this change, a cmdsub might get its own process group. This caused it to fail to cancel loops properly. For example: while true ; echo (sleep 5) ; end could not be control-C cancelled, because the signal would go to sleep, and so the loop would continue on. The simplest way to fix this is to match other shells and not use job control in cmdsubs. Related is #1362
32 lines
777 B
Fish
32 lines
777 B
Fish
#RUN: %fish -C "set helper %fish_test_helper" %s
|
|
# This hangs on OpenBSD
|
|
#REQUIRES: test "$(uname)" != OpenBSD
|
|
|
|
# Command subs run in same pgroup as fish, even if job control is 'all'.
|
|
# Verify that they get the same pgroup across runs (presumably fish's).
|
|
status job-control full
|
|
set g1 ($helper print_pgrp)
|
|
for i in (seq 10)
|
|
if test $g1 -ne ($helper print_pgrp)
|
|
echo "Unexpected pgroup"
|
|
end
|
|
end
|
|
status job-control interactive
|
|
|
|
echo "Finished testing pgroups"
|
|
#CHECK: Finished testing pgroups
|
|
|
|
|
|
# Ensure that if child processes SIGINT, we exit our loops
|
|
# Test for #3780
|
|
|
|
echo About to sigint
|
|
#CHECK: About to sigint
|
|
|
|
while true
|
|
sh -c 'echo Here we go; sleep .25; kill -s INT $$'
|
|
end
|
|
#CHECK: Here we go
|
|
|
|
echo I should not be printed because of the SIGINT.
|