Załóżmy, że istnieją 2 zadania t1, t2które można wykonać szeregowo, jak poniżej:
t1 ; t2
# OR
t1 && t2
Załóżmy teraz, że zapomniałem uruchomić t2i t1już działa; czy mogę dodać t2do potoku, aby został on wykonany po t1zakończeniu?
Załóżmy, że istnieją 2 zadania t1, t2które można wykonać szeregowo, jak poniżej:
t1 ; t2
# OR
t1 && t2
Załóżmy teraz, że zapomniałem uruchomić t2i t1już działa; czy mogę dodać t2do potoku, aby został on wykonany po t1zakończeniu?
Odpowiedzi:
Tak, możesz:
fglub %dodaj to, co chcesz na liście i uruchom, np .:
fg ; systemctl suspend # or
% ; systemctl suspend
Ponieważ fgzwraca wartość zwrotu zadania, które zostało wznowione, operatorzy list lubią &&i ||działają zgodnie z oczekiwaniami:
fg && echo "Finished successfully!" # or
% && echo "Finished successfully!"man bash/ JOB CONTROL mówi o zawieszonej postaci:
Wpisanie zawieszenia znak (zazwyczaj
^Z, Control- Z), gdy proces jest uruchomiony powoduje, że proces się zatrzymał i powraca do kontrolowaniabash. (…) Użytkownik może następnie manipulować stanem tego zadania, używającbgpolecenia, aby kontynuować je w tle,fgpolecenia, aby kontynuować na pierwszym planie lubkillpolecenia, aby je zabić. A^Zwchodzi w życie natychmiast i ma dodatkowy efekt uboczny, powodując odrzucenie oczekujących danych wyjściowych i typów.
fgwyjaśniono w man bash/ SHELL BUILTIN COMMANDS :
fg [ jobspec ]
Wznów specyfikację zadania na pierwszym planie i ustaw ją jako bieżącą. Jeśli specyfikacja zadania nie jest obecna, używane jest pojęcie powłoki o bieżącym zadaniu. Wartością zwracaną jest to, że polecenia umieszczonego na pierwszym planie, lub niepowodzenia jeśli bieg gdy kontrola zadaniem jest wyłączona lub, gdy prowadzony z kontrolą pracy włączona, jeśli jobspec nie określa prawidłową pracę lub jobspec określa zadania, które rozpoczęto bez kontroli zadań .
Dalsza lektura (oprócz man bash) na temat kontroli zadań:
^Z^Zi %-;%+;t3w niektórych przypadkach jest wystarczająco dobry, ale nie jest to prawdziwe rozwiązanie problemu.
Widziałem tę metodę tutaj: /superuser/334272/how-to-run-a-command-after-an-already-running-existing-one-finishes
gdzie najpierw robisz Ctrl+, zaby zatrzymać (zawiesić) działające, a następnie uruchamiasz nieodebrane polecenie w ten sposób: fg && ./missed_cmd.shi uruchomi się, jak tylko fgskończy się.
fg(Komenda na pierwszym planie) przyniesie zawieszonej pracy online i &&zapewni, że brakowało polecenie jest uruchamiane tylko wtedy, gdy pierwsze polecenie powiedzie.
t3wt1; t2; t3lubt1 && t2 && t3.