Is there a general way to wait
for an executed process that backgrounds in fish (like open "foo"
)? As far as I can tell, $!
(the PID of the last executed child process in bash) is not present in fish, so you can't just wait $!
.
1) The fish idiom is cmd1; and cmd2
or if cmd1; cmd2; end
.
2) You should find that bash and zsh also don't block if you execute open ARG
. That's because open
will normally background the program being run then open
exits. The shell has no idea that open
has put the "real" program in the background. Another example of that behavior is launching vim in GUI mode via vim -g
. Add the -W
flag on macOS or -w
on Linux to the open command and -f
to the vim command.
The key here is that open
, even if it backgrounds, won't return a signal that fish will use to evaluate the and
operator until something happens to the opened process. So you get the behavior you're looking for.