Це схоже на помилку в декількох оболонках, працює як очікується з ksh93 та zsh .
Фон:
Більшість оболонок, здається, виконують цикл while всередині основної оболонки та
Борн Шелл призупиняє всю оболонку, якщо ви введете ^ Z з оболонкою без входу
bash призупиняє тільки, sleep
а потім залишає цикл while на користь друку нового підказки оболонки
dash робить цю команду непридатною
З ksh93 справи працюють дуже інакше:
ksh93 робить те саме, тоді як команда запускається вперше, але як sleep
і бутін у ksh93, ksh93 має обробник, який викликає цикл while відщеплення від основної оболонки, а потім призупинення в момент введення ^ Z.
Якщо пізніше ви введете ksh93fg
, роздвоєна дитина, яка все ще працює циклом, продовжується.
Ви бачите основну відмінність, порівнюючи повідомлення контрольного завдання з bash та ksh93:
bash звіти:
[1]+ Stopped sleep 1
але ksh93 повідомляє:
^Z[1] + Stopped while true; do echo .; sleep 1; done
zsh поводиться схоже на ksh93
З обома оболонками у вас є один процес (основна оболонка), якщо ви не введете ^ Z, і два процеси оболонки після введення ^ Z.
$?
відповідь, і такtrue
не єtrue
. мабуть. я думаю.