mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-12-05 09:43:42 +08:00
c936c27fe1
The `function --on-job-exit caller` feature allows a command substitution
to observe when the parent job exits. This has never worked very well - in
particular it is based on job IDs, so a function that observes this will
run multiple times. Implement it properly.
Do this by having a not-recycled "internal job id".
This is only used by psub, but ensure it works properly none-the-less.
faho:
Backport of 6bf9ae9aeb
Fixes #6613
35 lines
805 B
Fish
35 lines
805 B
Fish
#RUN: %fish %s
|
|
|
|
# Verify the '--on-job-exit caller' misfeature.
|
|
function make_call_observer -a type
|
|
function observer_$type --on-job-exit caller --inherit-variable type
|
|
echo "Observed exit of $type"
|
|
end
|
|
end
|
|
|
|
command echo "echo ran 1" (make_call_observer external)
|
|
#CHECK: echo ran 1
|
|
#CHECK: Observed exit of external
|
|
|
|
builtin echo "echo ran 2" (make_call_observer builtin)
|
|
#CHECK: echo ran 2
|
|
#CHECK: Observed exit of builtin
|
|
|
|
function func_echo
|
|
builtin echo $argv
|
|
end
|
|
|
|
func_echo "echo ran 3" (make_call_observer function)
|
|
#CHECK: echo ran 3
|
|
#CHECK: Observed exit of function
|
|
|
|
# They should not fire again.
|
|
# TODO: We don't even clean up the functions!
|
|
|
|
command echo "echo ran 4"
|
|
builtin echo "echo ran 5"
|
|
func_echo "echo ran 6"
|
|
#CHECK: echo ran 4
|
|
#CHECK: echo ran 5
|
|
#CHECK: echo ran 6
|