Есть ли общий способ для wait
для выполняемого процесса, который фоны в рыбе (например, open "foo"
)? Насколько я могу судить, $!
(PID последнего выполненного дочернего процесса в bash) нет в рыбе, поэтому вы не можете просто wait $!
.Открытие программы, а затем ее ожидание
0
A
ответ
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
, пока что-то не произойдет с открытым процессом. Таким образом, вы получаете поведение, которое ищете.
Что вы подразумеваете под «IF_OK_CMD»? Что такое 'open' (т. Е. Какая ОС)? Я смущен, почему вы хотите «fg», когда вы никогда не ставите его в фоновом режиме. По умолчанию процессы выполняются на переднем плане. Возможно ли, что 'open' просто выходит? –
Я отредактирую это, чтобы быть более четким. –
Спасибо за ваши изменения. Я подозреваю, что происходит то, что 'open' просто выходит - он не привязан к фону, он просто заканчивает открытие файла и поэтому выходит. Если это OS X, возможно, вы хотите 'open -W'? –