2017-01-17 2 views
0

J'ai un problème d'itérer sur un tableau pour ouvrir plusieurs instances d'un programme. Quand je lance l'exemple suivant, je reçois trois instances de FSLView:La boucle de script du shell mac s'exécute en arrière-plan ignorée

arr=(bold_rs_fabio_precuneus_mask.nii.gz mask.nii.gz bold_rs_fabio.nii.gz) 
fslview ${arr[0]} & 
fslview ${arr[1]} & 
fslview ${arr[2]} & 

Dans cet exemple, je reçois seulement une instance de FSLView avec le premier fichier chargé:

arr=(bold_rs_fabio_precuneus_mask.nii.gz mask.nii.gz 
bold_rs_fabio.nii.gz) 
for f in $arr 
do 
    fslview $f & 
done 

Qu'est-ce que je manque dans la deuxième Exemple?

Merci à l'avance Martin

Répondre

0

Peut-être que vous devriez commencer une nouvelle coquille dans la boucle:

arr=(bold_rs_fabio_precuneus_mask.nii.gz mask.nii.gz bold_rs_fabio.nii.gz) 
for f in $arr 
do 
    (fslview $f &) 
done 

Ou essayez de construire une ligne de commande pour exécuter effectivement les processus en parallèle

arr=(bold_rs_fabio_precuneus_mask.nii.gz mask.nii.gz bold_rs_fabio.nii.gz) 
cmd="" 
for f in $arr 
do 
    cmd="$cmd fslview $f &" 
done 
#then let it run 
$cmd 

J'espère que ça aide

+0

Je suis intriguée de savoir pourquoi cela fait une différence e - voudriez-vous expliquer s'il vous plaît? –

+0

Je suppose que '&' s'applique à une ligne de commande dans un shell donné ... Je ne suis pas complètement sûr de savoir comment cela fonctionne pour OSX. J'essaie juste d'aider. –

+0

Salut Mark, merci pour vos idées. Je n'ai pas fait de changement cependant. J'utilise ce script dans une application mac automator. Peut-être que quelqu'un sait une solution de contournement? – gimba