Это похоже на ошибку в нескольких оболочках, она работает как положено с ksh93 и zsh .
Задний план:
Кажется, что большинство оболочек запускают цикл while внутри основной оболочки и
Bourne Shell приостанавливает всю оболочку, если вы наберете ^ Z с оболочкой без входа в систему
bash приостанавливает только sleep
функцию и затем покидает цикл while в пользу печати нового приглашения оболочки
тире делает эту команду невыполнимой
С ksh93 все работает совсем иначе:
ksh93 делает то же самое, в то время как команда запускается в первый раз, но, как sleep
и buitin в ksh93, ksh93 имеет обработчик, который заставляет цикл while отключаться от основной оболочки, а затем приостанавливается в тот момент, когда вы вводите ^ Z.
Если вы введете ksh93 позже, дочерний элементfg
, который все еще выполняет цикл, будет продолжен.
Вы видите основное отличие при сравнении сообщений jobcontrol от bash и ksh93:
Bash сообщает:
[1]+ Stopped sleep 1
но ksh93 сообщает:
^Z[1] + Stopped while true; do echo .; sleep 1; done
Zsh ведет себя подобно ksh93
В обеих оболочках у вас есть один процесс (основная оболочка), если вы не вводите ^ Z, и два процесса оболочки после ввода ^ Z.
$?
возврате, и этоtrue
не такtrue
. наверное. думаю.