Я думаю, что вы неправильно интерпретируете происходящее. Когда вы это делаете:
cmd1 && cmd2
оболочка запускает cmd1
в дочернем процессе, ждет этого процесса, а затем запускает cmd2
, если cmd1
выходит со статусом нулевого выхода.
Если нажать Ctrl+Z, ожидание вернется, оболочка установит $?
на 148, например (128 + SIGTSTP), а оценка остального произойдет в этот момент , поэтому cmd2
будет не выполнена. И cmd1
становится фоновым заданием.
Если бы вы набрали:
cmd1 || cmd2
или:
cmd1; cmd2
cmd2
была бы выполнена на Ctrl-Z и вам пришлось бы подождать, пока она завершится, чтобы получить следующую подсказку (где вы можете fg
или bg
ваше фоновое задание).
В zsh
, когда вы нажимаете Ctrl-Z в:
{cmd1 && cmd2 && cmd3}
Это приостанавливает работу всей группы (и перемещает ее в подоболочку). Однако, при возобновлении, команда приостановления, когда она заканчивается, установит $?
на 20, независимо от статуса выхода, и я не думаю, что есть способ обойти это, так что в конечном итоге вы повторите то же самое (хотя в {cmd1 || cmd2}
cmd2 будет выполнена после завершения команды, а не прямо на Ctrl-Z)).
Давайте скажем, Chroot находится в / Путь / к / Chroot
. Тогда вам нужно:
etc
в в / Путь / к / chroot
, а
файл, называемый Passwd
в / Путь / к / chroot / etc
, с хотя бы одной записью:
JUSER: x: 5002: 5002 :: / ust / path: / ue / shell
/ Путь / к / chroot / некоторые / путь
/ Путь / к / chroot / ue / chars
(Оболочка должна присутствовать , наряду с любыми необходимыми библиотеками и такими.)