Решения Брэда и Манкова являются хорошими предложениями. Другой вариант, похожий на их комбинацию, заключается в использовании GNU Screen для реализации вашей очереди. Преимущество этого в том, что вы можете работать в фоновом режиме, вы можете проверять это всякий раз, когда вы помещаете в очередь новые команды, просто вставляя их в буфер, который будет выполнен после выхода из предыдущих команд.
Первый забег:
$ screen -d -m -S queue
(кстати, сейчас хорошее время, чтобы поиграть с некоторыми классными . screenrc файлами )
Это вызовет сеанс фонового экрана для вас с именем queue.
Теперь поставьте в очередь столько команд, сколько хотите:
screen -S queue -X stuff "echo first; sleep 4; echo second^M"
Я делаю несколько команд в приведенном выше только для тестирования. Ваш вариант использования будет выглядеть примерно так:
screen -S queue -X stuff "echo first^M"
screen -S queue -X stuff "echo second^M"
Обратите внимание, что «^ M» в моей строке выше - это способ получить встроенную новую строку, которая будет интерпретирована позже после того, как экран вставит ее в существующую оболочку bash. Используйте «CTL-V», чтобы получить эту последовательность.
Было бы довольно легко сделать несколько простых сценариев оболочки для автоматизации этого и поставить команды в очередь. Затем всякий раз, когда вы хотите проверить состояние фоновой очереди, вы повторно присоединяете через:
screen -S queue -r
Технически, вам даже не нужно называть ваш сеанс экрана, и он будет работать нормально, но как только вы его зацепите, вы все равно захотите оставить его включенным. ;-)
Конечно, если вы сделаете это, другой хороший способ сделать это - назвать одну из текущих окон «очередь» и использовать:
screen -S queue -p queue -X stuff "command"