Sou um novato em Unix, então peço desculpas se a solução para essa pergunta for muito fácil. Estou interessado em executar um script várias vezes (porque o processo/algoritmo não produz exatamente a mesma resposta em cada réplica; o objetivo é então obter uma média, intervalo de confiança, etc. das execuções de réplicas), e para isso estou tentando usar um loop (neste exemplo para 50 réplicas):
for i in {1..50}; do bash script.sh infile.txt; done
Mas assim, obviamente, a saída de cada nova iteração sobrescreve a saída da anterior. Gostaria de saber como posso salvar a saída (uma série de arquivos e pastas) de cada iteração em uma nova pasta diferente, ou seja, para um total de 50 pastas neste exemplo. Estou tentando fazer isso no terminal em um Mac.
Atualização: Desculpe, esqueci de mencionar que o script requer, para ser executado com sucesso, a leitura de um arquivo de parâmetros de entrada e usa/invoca um monte de executáveis, todos localizados dentro de uma pasta chamada PROGRAMMES
. Então, em uma execução normal do script, ambos, mais o script e o infile, ficam na mesma pasta. Mais especificamente, a parte inicial do script contém os seguintes argumentos (aqui está um link para o script: https://github.com/esrud/GONE/blob/master/MacOSX/script_GONE.sh ):
### Set arguments
### Take input parameters from file INPUT_PARAMETERS_FILE
source INPUT_PARAMETERS_FILE
### EXECUTABLES FILES NEEDED IN DIRECTORY PROGRAMMES:
### MANAGE_CHROMOSOMES2
### LD_SNP_REAL3
### SUMM_REP_CHROM3
### GONE (needs gcc/7.2.0)
### GONEaverages
### GONEparallel.sh
Muito obrigado por qualquer sugestão/ajuda.
Carlos
Basicamente o mesmo que o de @JdeHann, exceto que:
dir01
,dir02
...dir50
, para que sejam classificados numericamente na saída,ls
por exemplo.mkdir
ecd
antes de continuar.cd
afete somente aquele subshell. Preferível no caso geral, poiscd ..
nem sempre é garantido que você vá para o mesmo lugar de onde começou (como se o script movesse seu diretório de trabalho atual).Se o script precisar que os arquivos e outros recursos estejam no mesmo diretório, você pode usar links simbólicos:
Editar . Olhando para esse script agora que você forneceu um link para ele, entre os muitos erros de codificação lá, há
source INPUT_PARAMETERS_FILE
which should have beensource ./INPUT_PARAMETERS_FILE
.Com
source INPUT_PARAMETERS_FILE
, isso significa queINPUT_PARAMETERS_FILE
é pesquisado em$PATH
(e então no diretório de trabalho atual se não for encontrado,$PATH
a menos que o bash seja executado no modo POSIX), o que provavelmente não foi intencional, mas aqui significa que podemos evitar adicionar um link simbólico a esse arquivo adicionando o diretório que contém esse arquivo a$PATH
:Que tal isto:
Isso pressupõe que o script.sh exista no diretório de nível superior. Talvez você deva usar o mesmo no
infile.txt
.