Мне нужно запустить процесс в фоновом режиме, а затем выйти из текущего терминала.
Следующая команда приводит к ошибке:
> google-chrome-stable &! && exit
zsh: parse error near '&&'
Я рассматривал возможность простого вызова «google-chrome-stable &!» и проверки кода ошибки с помощью оператора if, но надеюсь найти более простой способ сделать это.
решение1
&!
и &&
обе команды являются отдельными, поэтому вы не можете объединить их, поэтому
google-chrome-stable &! exit
Вероятно, это то, что вам нужно.
Вы не сможете получить код выхода, пока фоновая команда не завершит работу...
решение2
Статус выхода, возвращаемый вызывающей оболочке при запуске фонового задания, следующий:всегдануль:
% bogus &
[1] 66712
% zsh: command not found: bogus
[1] + exit 127 bogus
% echo $?
0
... и оба &!
и &&
являются терминаторами команд. Это означает, что ваша команда, вероятно, должна быть записана как
google-chrome-stable &! exit
или как эквивалент
google-chrome-stable &!
exit
Получить реальный статус завершения фонового задания можно только с помощью wait
идентификатора задания (его нет, так как вы отменили владение им) или идентификатора процесса (но это невозможно, так как вы отменили владение этим процессом, и, следовательно, он больше не является процессом, который оболочка считает дочерним; он удаляется из списка текущих заданий оболочки).
Если бы вы не отказались от работы, может быть, через
google-chrome-stable & chrome_pid=$!
то команда wait $chrome_pid
в конечном итоге завершится со статусом завершения вашего фонового задания, но не раньше, чем это задание завершится, либо из-за того, что оно не сможет запуститься, либо из-за того, что вы каким-то образом закроете браузер.