Я ищу способ "сложить" команды от терминальной подсказки так, чтобы только один в то время был выполнен:
&
)&
). Но снова, подсказка вернулась.Своего рода соединение между:
&
запускаться в фоновом режиме, но вторая команда работало бы в то же время, что и первый, и я не хочу это;&&
или ;
для запуска одной команды после другого но необходимо записать им всем в однажды. Я хочу возвратить подсказку после того, как команда будет выполнена или сложена. Самое близкое, которое я нашел, было бы:
$ cmd1 &
$ wait; cmd2 &
Но я ищу что-то немного более мощное, позволяя мне просмотреть ожидание, отказавшие и завершенные команды. Возможно, что-то как:
$ stackit cmd1
cmd1 started
$ stack it cmd2
cmd2 queued
$ stack it cmd3
cmd3 queued
$ stack it --
[1] running
[2] queued
[3] queued
Возможно, даже допускать некоторый параллелизм, как 2 команды в то время.
Это кажется довольно универсальным, таким образом, я не испытываю желание изобретать велосипед.
Варианты использования:
Вы ищете спулер задачи команда. В репозиториях Debian/Ubuntu pacakage для установки task-spooler
, и двоичный файл для вызова tsp
.
В Вашем случае (&&
стиль) Вы могли использовать
tsp -d cmd1
tsp -d cmd2
tsp -d cmd3
затем использование
tsp -l
для осмотра состояния очереди.
существуют пути (-S
) для увеличения числа макс. одновременных заданий, также.
Хотя bash
в и себя не имеет "очереди" или "складывает" тип управления заданиями, но у них действительно есть управление заданиями (который существовал в течение многих лет, путь назад к korn
оболочка System V Unix), посредством чего можно поместить процессы в фон и управлять ими с kill
команда
DIR:/coreutils
skolodya@ubuntu:$ gedit &> /dev/null &
[1] 26742
DIR:/coreutils
skolodya@ubuntu:$ gnome-terminal &> /dev/null &
[2] 26767
DIR:/coreutils
skolodya@ubuntu:$ jobs
[2] + Running gnome-terminal >/dev/null 2>&1
[1] - Running gedit >/dev/null 2>&1
DIR:/coreutils
skolodya@ubuntu:$ kill -SIGSTOP %1
DIR:/coreutils
skolodya@ubuntu:$ jobs
[1] + Stopped (signal) gedit >/dev/null 2>&1
[2] - Running gnome-terminal >/dev/null 2>&1
DIR:/coreutils
skolodya@ubuntu:$ kill -SIGCONT %1
DIR:/coreutils
skolodya@ubuntu:$ jobs
[1] + Stopped (signal) gedit >/dev/null 2>&1
[2] - Running gnome-terminal >/dev/null 2>&1
Вывод тех команд в вышеупомянутом примере переходит в /dev/null
, но конечно если это - приложение командной строки, Вы хотите перенаправить вывод где-нибудь, можно просмотреть его позже. Например, a named pipe
.
DIR:/coreutils
skolodya@ubuntu:$ mkfifo test.fifo
DIR:/coreutils
skolodya@ubuntu:$ apt-cache search 1> test.fifo &
[1] 27775
DIR:/coreutils
skolodya@ubuntu:$ cat test.fifo | head -n 3
screen - terminal multiplexer with VT100/ANSI terminal emulation
screen-dbg - Debugging symbols for GNU Screen
asic0x-dkms - iBurst USB modem driver in DKMS format
Здесь я перенаправляю stdout
(дескриптор файла 1) к каналу я создал, и рассмотрите его позже. Это может быть сделано с несколькими командами путем создания нескольких именованных каналов.
Примечание стороны: можно было написать сценарий чего-то с этими опциями, по крайней мере по моему скромному мнению, легче просто использовать эти методы управления заданиями собой.