Możesz rozdzielić wiele poleceń ;
, dzięki czemu są one wykonywane sekwencyjnie, na przykład:
really_long_script.sh ; echo Finished
Jeśli chcesz uruchomić następny program tylko wtedy, gdy skrypt zakończy się kodem powrotu 0 (co zwykle oznacza, że wykonał się poprawnie), to:
really_long_script.sh && echo OK
Jeśli chcesz mieć coś przeciwnego (tzn. Kontynuuj tylko wtedy, gdy bieżące polecenie nie powiodło się), niż:
really_long_script.sh || echo FAILED
Możesz uruchomić skrypt w tle (ale uważaj, dane wyjściowe skryptów ( stdout
i stderr
) będą nadal przechodzić do terminala, chyba że gdzieś go przekierujesz), a następnie wait
:
really_long_script.sh &
dosomethingelse
wait; echo Finished
Jeśli skrypt został już uruchomiony, możesz go zawiesić Ctrl-Z
, a następnie wykonać coś takiego:
fg ; echo Finished
Gdzie fg
przenosi zawieszony proces na pierwszy plan ( bg
sprawiłby, że działałby w tle, prawie jak na początku &
)
fg
zwraca wartość wznowionego zadania, możesz użyć tej opcjifg && echo Finished
, aby upewnić się, że wykonanie polecenia zakończy się powodzeniem przed wykonaniem drugiego polecenia.Możesz także użyć kontroli zadań bash. Jeśli zacząłeś
następnie naciśnij ctrl + z, aby go zawiesić:
aby zrestartować zadanie w tle (tak jakby je rozpoczęło
really_long_script.sh &
). Następnie możesz poczekać na tę pracę w tle za pomocągdzie N jest identyfikatorem zadania (prawdopodobnie 1, jeśli nie uruchomiłeś żadnych innych zadań w tle), które jest również wyświetlane jak
[1]
powyżej.źródło
Jeśli proces nie działa na bieżącym tty, spróbuj tego:
źródło
watch
. Super krótka odpowiedź i jedna z nowych przydatnych metod korzystania z zegarkaOkazuje się, że nie jest to takie trudne: możesz po prostu wpisać kolejne polecenie w oknie podczas działania istniejącego, nacisnąć klawisz Enter, a gdy pierwsze zakończy działanie, drugie polecenie uruchomi się automatycznie.
Sądzę, że są bardziej eleganckie sposoby, ale wydaje się, że to działa.
Edytowanie w celu dodania, że jeśli chcesz uruchomić alert po zakończeniu polecenia, możesz utworzyć te aliasy w .bashrc, a następnie uruchomić
alert
podczas działania:źródło
Jakiś czas temu napisałem skrypt czekający na koniec innego procesu.
NOISE_CMD
może być coś takiegonotify-send ...
, biorąc pod uwagę, żeDISPLAY
jest ustawiony poprawnie.Bez żadnych kłótni natychmiast zrób hałas. To zachowanie pozwala na coś takiego dla wygody (powiedz, że wywołujesz skrypt poniżej
alarm.sh
):Oczywiście przy pomocy takiego skryptu możesz robić wiele zabawnych rzeczy, np. Pozwalać instancji
alarm.sh
czekać na instancjęalarm.sh
, która czeka na jakieś inne polecenie. Lub wykonanie polecenia tuż po zakończeniu zadania innego zalogowanego użytkownika ...>: DPoprzednia wersja powyższego skryptu może być interesująca, jeśli chcesz uniknąć zależności
pgrep
i zaakceptować samodzielne wyszukiwanie identyfikatorów procesów:Nie na temat, ale przydatne w podobnych sytuacjach: Ktoś może zainteresować
reptyr
się narzędziem, które „kradnie” proces z jakiejś (macierzystej) powłoki i uruchamia ją z bieżącej powłoki. Wypróbowałem podobne implementacje ireptyr
jest najładniejszy i najbardziej niezawodny dla moich celów.źródło