2016-07-09 5 views
0

Есть ли общий способ для wait для выполняемого процесса, который фоны в рыбе (например, open "foo")? Насколько я могу судить, $! (PID последнего выполненного дочернего процесса в bash) нет в рыбе, поэтому вы не можете просто wait $!.Открытие программы, а затем ее ожидание

+1

Что вы подразумеваете под «IF_OK_CMD»? Что такое 'open' (т. Е. Какая ОС)? Я смущен, почему вы хотите «fg», когда вы никогда не ставите его в фоновом режиме. По умолчанию процессы выполняются на переднем плане. Возможно ли, что 'open' просто выходит? –

+0

Я отредактирую это, чтобы быть более четким. –

+2

Спасибо за ваши изменения. Я подозреваю, что происходит то, что 'open' просто выходит - он не привязан к фону, он просто заканчивает открытие файла и поэтому выходит. Если это OS X, возможно, вы хотите 'open -W'? –

ответ

3

1) Идиома рыбы cmd1; and cmd2 или if cmd1; cmd2; end.

2) Вы должны обнаружить, что bash и zsh также не блокируются, если вы выполните open ARG. Это потому, что open, как правило, будет работать в фоновом режиме, а затем выйдет open. Оболочка не знает, что open поставил «настоящую» программу в фоновом режиме. Другим примером такого поведения является запуск vim в режиме графического интерфейса пользователя через vim -g. Добавьте флаг -W на macOS или -w на Linux в команду open и -f в команду vim.

Ключ здесь в том, что open, даже если он фоны, не вернет сигнал, который рыба будет использовать для оценки оператора and, пока что-то не произойдет с открытым процессом. Таким образом, вы получаете поведение, которое ищете.