Como percorrer xargs, onde cada script usa uma variável env comum

3

É possível iniciar 10 dos mesmos scripts de shell que também iniciam mais cópias, e todos eles usam a mesma variável env?

Por exemplo:

script.sh:

#!/bin/bash
export COUNTER=$((COUNTER+1));
echo $COUNTER;
sleep 5;
/script.sh

usando xargs -P 10 script.sh resulta em cada instância criando seu próprio escopo, em vez de compartilhar a mesma variável $ COUNTER

Estou essencialmente tentando implantar script.sh 10 vezes iniciais e, quando cada uma delas é concluída, ela executa script.sh novamente, apenas desta vez com a variável $COUNTER recém-incrementada.

Eu pedi uma pergunta semelhante aqui, e agora entendo porque meu método anterior não funciona, estou extremamente interessado em saber qual será a melhor maneira de realmente conseguir isso.

    
por d-_-b 29.12.2013 / 07:36

2 respostas

2

Você deve dar uma olhada no paralelo GNU . Ele pode limitar o número de trabalhos gerados de várias maneiras ( --jobs 10 para seu aplicativo) e também tem um número de trabalho ( {#} ) que pode ser passado como um argumento para o script.

Como Ole comentou, o seguinte deve funcionar:

find . -type f | parallel -j10 my_script {#} {}
    
por 29.12.2013 / 07:52
1

O IPC pode ser outra abordagem. Você pode criar um segmento de memória compartilhada que fornecerá um mecanismo de bloqueio no qual cada processo poderá atualizar o valor armazenado aqui. Este não é um arquivo no sistema de arquivos, é uma seção de memória designada para esse propósito.

Você pode ler mais sobre o IPC por meio da página man ipcs man.

Referências

por 29.12.2013 / 07:52