Решения Брэда и Манкова являются хорошими предложениями. Другое, похожее на их комбинацию, заключается в использовании 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"