BG / FG внутри цикла командной строки
Ctrl-Z (^ Z) действует таким образом, я не понимаю, когда это делается внутри цикла, выполняемого из терминала.
Скажи я типа
for ii in {0..100}; do echo $ii; sleep 1; done
затем я ударил ^ z. Я получу:
[1]+ Stopped sleep 1
Я могу возобновить работу, используя fg или bg, но работа относится только к команде сна. Остальная часть цикла, по-видимому, исчезла, и на терминале больше не появляется номер.
Я мог бы использовать & после команды, чтобы немедленно запустить ее в фоновом режиме, или другое решение - обернуть все это в подоболочку:
( for ii in {0..100}; do echo $ii; sleep 1; done )
тогда ^ z дает мне
[1]+ Stopped ( for ii in {0..100};
do
echo $ii; sleep 1;
done )
Эту работу можно возобновить, и все счастливы. Но я обычно не имею привычки делать это при выполнении одноразовой задачи, и вопрос, который я задаю, заключается в том, почему первое поведение происходит в первую очередь. Есть ли способ приостановить цикл командной строки, который не является subshell'd? А что случилось с остальной частью цикла в первом примере?
Обратите внимание, что это относится к циклу:
echo 1; sleep 5; echo 2
и удар ^ z во время сна вызываетecho 2
выполнить:
1
^Z
[2]+ Stopped sleep 5
2
Или я должен просто привыкнуть использовать & и назвать это темной магией?