打开一个程序然后等待它

Opening a program and then waiting for it

是否有通用方法 wait 执行以 fish 为背景的进程(如 open "foo")?据我所知,fish 中不存在 $!(bash 中最后执行的子进程的 PID),因此您不能只是 wait $!.

1)鱼成语是cmd1; and cmd2if cmd1; cmd2; end.

2) 你应该会发现 bash 和 zsh 如果你执行 open ARG 也不会阻塞。那是因为 open 通常会使 运行 的程序后台运行,然后 open 退出。 shell 不知道 open 已将 "real" 程序置于后台。该行为的另一个示例是通过 vim -g 在 GUI 模式下启动 vim。在 macOS 上添加 -W 标志或在 Linux 上添加 -w 到打开命令,并将 -f 添加到 vim 命令。

这里的关键是 open,即使它有背景,也不会 return 鱼将用来评估 and 运算符的信号,直到打开的东西发生问题过程。所以你得到了你正在寻找的行为。