Я хотел бы знать, каково поведение Ctrl + Z и fg в bash при желании добавить команды, которые будут выполнены после завершения выполняющейся команды. Например, в приведенной ниже последовательности команд я ожидаю, что консоль отобразит «1», затем «2», затем «3», затем «4», но я получу только последнюю команду, «echo 4», после сна 30 отделки:
avilella@magneto:~$ sleep 30 && echo 1
^Z
[1]+ Stopped sleep 30
avilella@magneto:~$ fg && sleep 5 && echo 2
sleep 30
^Z
[1]+ Stopped sleep 30
avilella@magneto:~$ fg && sleep 5 && echo 3
sleep 30
^Z
[1]+ Stopped sleep 30
avilella@magneto:~$ fg && sleep 5 && echo 4
sleep 30
4
Есть идеи?
jobs
после каждого Ctrl-Z и посмотреть, что у вас работаетОтветы:
Control-Z приостанавливает задание (не командную строку вашей оболочки), поэтому все остальные команды будут выполняться без ожидания. Похоже, что когда вы останавливаете задание, оболочка пытается запустить следующее, но, как вы использовали,
&&
и предыдущая команда не была завершена ОК (не была завершена вообще, но была приостановлена), команда с && отбрасывается. С другой стороны, если вы используете;
вместо&&
второй команды в командной строке, то вы увидите, что вторая команда выполняется, когда первая приостановлена:источник
Это не
fg
ты хочешь; это могло бы бытьwait
. НапримерДля получения дополнительной информации:
источник
wait
удовлетворяет требованиям ОП лучше, чемfg
? Когда я запускаю./do-work
, нажимаю ctrl-z и печатаюfg && ./do-other-work
, выходные данные первой работы снова передаются на консоль, а вторая работа начинается после завершения первой. Разве это не то, чего хотел ОП? Если я буду использоватьwait
, вторая работа начнется, не заботясь о судьбе первой работы.