Один из способов сделать это:
#! /bin/sh
VAR1="abc def ghi"
VAR2="1 2 3"
fun()
{
set $VAR2
for i in $VAR1; do
echo command "$i" "$1"
shift
done
}
fun
Выход:
command abc 1
command def 2
command ghi 3
ts - task spooler. A simple unix batch system
должен быть готов к этой задаче. Он запускает диспетчер очереди задач/сервер очередей, и вы можете добавить новую задачу с помощью простой команды, например:
tsp yourcommand
Вы можете указать количество слотов -, т. е. сколько заданий должно выполняться одновременно. По умолчанию установлено значение один, AFAIK. Он также имеет некоторые расширенные функции, такие как запуск команды только в том случае, если определенная предыдущая команда выполнена успешно. Вы также можете просмотреть очередь и детали для каждого задания. Вы можете найти более подробную информацию на справочной странице .
Вы можете сделать это, просто используя bash:
1 -создать fifo с помощью mkfifo (вы также можете создать файл)
mkfifo mybuff
2 -завершите fifo и передайте каждую строку вашему исполнителю (это будет что-то вроде сервера задач)
while IFS= read -r line
do
echo "Running: '$line' with bash"
bash -c "$line"
echo "Finished '$line' with exit code: $?"
done < <(tail -f mybuff)
3 -Отправьте свои команды в очередь, например, (это будет клиент, запрашивающий задачи)
echo 'sleep 10' >> mybuff
echo 'echo "hello world"' >> mybuff
echo 'my fancy command to be executed' >> mybuff
...
PS :Вы можете упростить шаг 2, как в примере ниже, но это приведет к завершению прослушивателя задач, когда вы отправите «выход» в свой командный буфер
tail -f mybuff | bash -x