Отправить процесс в фоновый режим, отменить операцию и выйти из терминала (конфликт операторов & и && в zsh)

Отправить процесс в фоновый режим, отменить операцию и выйти из терминала (конфликт операторов & и && в zsh)

Мне нужно запустить процесс в фоновом режиме, а затем выйти из текущего терминала.

Следующая команда приводит к ошибке:

> 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в конечном итоге завершится со статусом завершения вашего фонового задания, но не раньше, чем это задание завершится, либо из-за того, что оно не сможет запуститься, либо из-за того, что вы каким-то образом закроете браузер.

Связанный контент