Сериализируйте команды оболочки

Я ищу способ "сложить" команды от терминальной подсказки так, чтобы только один в то время был выполнен:

  • Сначала введите команду, нажмите Enter, выполнение запускается, назад для окружения (как &)
  • Я могу ввести вторую команду. Я нажимаю Enter, первая команда еще не завершается, таким образом, это сложено (в отличие от этого, &). Но снова, подсказка вернулась.

Своего рода соединение между:

  • & запускаться в фоновом режиме, но вторая команда работало бы в то же время, что и первый, и я не хочу это;
  • && или ; для запуска одной команды после другого но необходимо записать им всем в однажды. Я хочу возвратить подсказку после того, как команда будет выполнена или сложена.

Самое близкое, которое я нашел, было бы:

$ 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 команды в то время.

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

Варианты использования:

  • Копирование файлов к и от старого NAS, который страдает когда несколько операций, выполненных одновременно
  • wget на большом количестве файлов, где ограниченное количество соединений было бы предпочтено
5
задан 28 January 2016 в 07:58

2 ответа

Вы ищете спулер задачи команда. В репозиториях Debian/Ubuntu pacakage для установки task-spooler, и двоичный файл для вызова tsp.

В Вашем случае (&& стиль) Вы могли использовать

tsp -d cmd1
tsp -d cmd2
tsp -d cmd3

затем использование

tsp -l

для осмотра состояния очереди.

существуют пути (-S) для увеличения числа макс. одновременных заданий, также.

2
ответ дан 23 November 2019 в 10:35

Хотя 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) к каналу я создал, и рассмотрите его позже. Это может быть сделано с несколькими командами путем создания нескольких именованных каналов.

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

0
ответ дан 23 November 2019 в 10:35

Другие вопросы по тегам:

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