2016-07-09 33 views
0

有没有一种通用的方式wait为一个执行的过程,鱼的背景(如open "foo")?据我所知,$!(bash中最后执行的子进程的PID)在鱼中不存在,所以你不能只用wait $!打开一个程序,然后等待它

+1

“IF_OK_CMD”是什么意思?什么是“开放”(即哪个操作系统)?我很困惑,为什么当你从不把它放在后台时,你想要“流程”。默认情况下,进程在前台执行。 “open”是否可能退出? –

+0

我会编辑它更清晰。 –

+2

感谢您的编辑。我怀疑发生了什么事情是'open'正在退出 - 它没有后台,它只是完成打开文件,因此退出。如果这是OS X,也许你想'打开-W'? –

回答

3

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

2)如果你执行open ARG,你应该发现bash和zsh也不会被阻塞。这是因为open通常会背景正在运行的程序,然后open退出。该shell不知道open已将“真实”程序放在后台。这种行为的另一个例子是通过vim -g以GUI模式启动vim。将macOS上的-W标志或Linux上的-w添加到open命令,将-f添加到vim命令。

这里的关键是,即使它是背景,open也不会返回鱼将用于评估and操作符的信号,直到发生打开的过程时发生某些情况。所以你得到你正在寻找的行为。

相关问题