Zarówno rozwiązania Brada, jak i Mankoffa są dobrymi sugestiami. Innym, który jest podobny do kombinacji obu z nich, byłoby użycie GNU Screen do implementacji twojej kolejki. Ma to tę zaletę, że może działać w tle, możesz to sprawdzić za każdym razem, a kolejkowanie nowych poleceń po prostu wkleja je do bufora, który ma zostać wykonany po wyjściu poprzednich poleceń.
Pierwszy bieg:
$ screen -d -m -S queue
(nawiasem mówiąc, teraz jest dobry moment na zabawę z niesamowitymi plikami . screenrc )
Spowoduje to utworzenie sesji ekranu w tle dla Ciebie o nazwie kolejka.
Teraz ustaw w kolejce tyle poleceń, ile chcesz:
screen -S queue -X stuff "echo first; sleep 4; echo second^M"
Wykonuję wiele powyższych poleceń tylko w celu testowania. Twój przypadek użycia prawdopodobnie wyglądałby bardziej jak:
screen -S queue -X stuff "echo first^M"
screen -S queue -X stuff "echo second^M"
Zauważ, że „^ M” w moim wierszu powyżej to sposób na osadzenie nowej linii, która zostanie zinterpretowana później, gdy screen włoży ją do istniejącej powłoki bash. Użyj „CTL-V”, aby uzyskać tę sekwencję.
Stworzenie prostych skryptów powłoki do automatyzacji i ustawiania w kolejce poleceń byłoby dość łatwe. Następnie za każdym razem, gdy chcesz sprawdzić stan swojej kolejki w tle, ponownie dołączasz za pomocą:
screen -S queue -r
Technicznie rzecz biorąc, nie musisz nawet nazywać swojej sesji ekranowej i będzie ona działała dobrze, ale kiedy już ją wciągniesz, i tak będziesz chciał pozostawić ją uruchomioną przez cały czas. ;-)
Oczywiście, jeśli to zrobisz, innym dobrym sposobem na to byłoby nazwanie jednego z obecnych okien „kolejką” i użycie:
screen -S queue -p queue -X stuff "command"