Я могу так или иначе добавить “&& prog2” к уже выполнению prog1?

Как сказанный BЈовић, в целом, каждый файл имеет свой собственный заголовок. Попробуйте этим примером из Ubuntu Как To:

mencoder -ovc copy -oac copy video1.avi video2.avi -o completevideos.avi 

87
21.01.2014, 09:25
4 ответа

Необходимо смочь сделать это в той же оболочке, которую Вы хорошо знаете wait команда:

$ sleep 30 &
[1] 17440

$ wait 17440 && echo hi

...30 seconds later...
[1]+  Done                    sleep 30
hi

выборка из страницы справочника Bash

wait [n ...]
     Wait for each specified process and return its termination status. Each n 
     may be a process ID or a job specification; if a job spec is given,  all 
     processes  in that job's pipeline are waited for.  If n is not given, all 
     currently active child processes are waited for, and the return status is 
     zero.  If n specifies a non-existent process or job, the return status is 
     127.  Otherwise, the return status is the exit status of the last process 
     or job waited for.
118
27.01.2020, 19:30
  • 1
    Ожидание на команде должно сделать задание. –  BillThor 13.11.2013, 02:41
  • 2
    Существует много кратких форм для ввода PID фонового процесса такой как %, %1 и $!. Важно предоставить PID, или вторая команда будет всегда работать. –  BillThor 13.11.2013, 03:06
  • 3
    @BillThor - Вы просто квалифицируете ответ или говорите мне это? –  slm♦ 13.11.2013, 03:07
  • 4
    я квалифицирую ответ. Плоскость wait не обеспечит желаемый результат. Распространено использовать краткие формы, поскольку они менее подвержены опечаткам. –  BillThor 13.11.2013, 03:18
  • 5
    Позвольте мне быть первым для поздравления Вас с Вашим новейшим значком :) –  terdon♦ 02.07.2014, 21:00

fg возвраты с кодом выхода из программы это возобновляется. Можно поэтому приостановить программу с ^Z и затем использовать fg && ... возобновлять его.

$ /bin/myprog
some output...
^Z
[1]+ Stopped              /bin/myprog
$ fg && /usr/bin/mycleanup
63
27.01.2020, 19:30
  • 1
    , если Вы приостанавливаете снова, прежде чем он закончит и сделает то же самое с другой командой, делает начальное объединение в цепочку mycleanup, заменяются? –  Burhan Ali 08.12.2013, 12:44
  • 2
    @BurhanAli myprog по причинам второго раза fg завершаться с кодом выхода 20 - который является ненулевым, таким образом, цепочечное mycleanup команда не выполняется. –  n.st 04.01.2014, 06:00

Не уверенный, если то, что Вы просите, возможно, но если у Вас все еще есть оболочка, Вы запустили программу от, можно всегда проверять $? для статуса выхода последнего процесса:

$ /bin/myprog
some output...
$ if [ $? -ne 0 ];then echo "non-zero exit status";else echo "0 exit status";fi
1
27.01.2020, 19:30
  • 1
    Это будет работать, но он должен будет выполнить это вручную впоследствии, он хочет выполнить это автоматически, когда команда заканчивается. –  slm♦ 11.11.2013, 21:16
  • 2
    @slm. У меня нет решения для той точной проблемы. –  Joseph R. 11.11.2013, 21:18
  • 3
    Выезд wait команда в Bash. –  slm♦ 11.11.2013, 21:31

Если бы задание находится на переднем плане, любая из этих команд имела бы то же поведение, как Вы ожидаете.

[ $? -eq 0 ] && prog2
(( $? )) || prog2

Примечание: $? будет содержать статус возврата под управлением программы, когда это выйдет.

Это явно указывает, что оболочка сделала бы при исходном вводе команды.

prog1 && prog2

Если первая команда не читает из stdin и работает на переднем плане, новая команда может быть введена, в то время как первая команда работает. Оболочка считает и выполнит его, когда первая команда выполнится. Если команда будет работать в фоновом режиме, маловероятно, что это читает stdin.

Править: Помещение задания в фоновом режиме и использование WAIT команда могла также использоваться. Это должно быть сделано с осторожностью, если другие задания были также выполнены в фоновом режиме. Спецификация задания требуется, чтобы иметь WAIT управляйте возвращаются, состояние задания ожидало на.

1
27.01.2020, 19:30
  • 1
    , Это будет работать, но он должен будет выполнить это вручную впоследствии, он хочет выполнить это автоматически, когда команда заканчивается. Согласованный –  slm♦ 11.11.2013, 21:17
  • 2
    @slm пока команда не читает stdin, новая команда может быть введена, в то время как первая команда работает. Оболочка считает его, как только первая команда сделана. –  BillThor 11.11.2013, 21:19
  • 3
    Если он делает что-нибудь в оболочке после того, как это был фон, это, вероятно, полито из шланга. По крайней мере, согласно тестированию вступительного экзамена я делал к настоящему времени! –  slm♦ 11.11.2013, 21:22
  • 4
    @BillThor я думаю, что необходимо добавить что комментарий к ответу. –  Joseph R. 11.11.2013, 21:25
  • 5
    Да, использование wait не идеально также. Преимущество, IMO, состоит в том, что это дает нам более ясный API, с которым мы имеем дело. Ввод большего количества команд на командной строке после того, как что-то работает, казался небольшим hacky мне. wait все еще страдает от не получения прямой ссылки на рабочий PID, wrt статус возврата. Это, кажется, проблема больше w/, как Bash реализует вещи хотя: stackoverflow.com/questions/356100 / …. Таким образом, это могло бы быть столь хорошо, как это добирается. –  slm♦ 11.11.2013, 21:43

Теги

Похожие вопросы