2014-09-12 12 views
0

Je souhaite prendre un certain nombre de modèles d'un dossier et les utiliser dans un script sge pour un travail de tableau. Donc, je fais ce qui suit dans le script SGE:Utiliser les variables comme paramètres d'argument dans le script qsub

MODELS=/home/sahil/Codes/bistable/models 
numModels=(`ls $MODELS|wc -l`) 
echo $numModels 

#$ -S /bin/bash 
#$ -cwd 
#$ -V 
#$ -t 1-$[numModels] # Running array job over all files in the models directory. 

model=(`ls $MODELS`) 
echo "Starting ${model[$SGE_TASK_ID-1]}..." 

Mais j'obtiens l'erreur suivante:

Unable to read script file because of error: Numerical value invalid! 
The initial portion of string "$numModels" contains no decimal number 

J'ai aussi essayé d'utiliser

#$ -t 1-${numModels} 

et

#$ -t 1-(`$numModels`) 

mais aucun de ceux-ci ne fonctionne. Toutes les suggestions/méthodes alternatives sont les bienvenues, mais elles doivent utiliser la fonctionnalité de travail de tableau de qsub.

Répondre

2

Attention à Bash, #$ -t 1-$[numModels] n'est rien de plus qu'un commentaire; par conséquent, il n'applique pas d'extension de variable à numModels.

Une option est de passer l'argument -t dans la ligne de commande: retirer de votre script:

#$ -S /bin/bash 
#$ -cwd 
#$ -V 

model=(`ls $MODELS`) 
echo "Starting ${model[$SGE_TASK_ID-1]}..." 

et soumettre le script avec

MODELS=/home/sahil/Codes/bistable/models qsub -t 1-$(ls $MODELS|wc -l) submit.sh 

Si vous préférez avoir une auto script de soumission contenue, une autre option consiste à passer le contenu de l'ensemble du script via stdin comme ceci:

#!/bin/bash 
qsub <<EOT 
MODELS=/home/sahil/Codes/bistable/models 
numModels=(`ls $MODELS|wc -l`) 
echo $numModels 

#$ -S /bin/bash 
#$ -cwd 
#$ -V 
#$ -t 1-$[numModels] # Running array job over all files in the models directory. 

model=(`ls $MODELS`) 
echo "Starting ${model[$SGE_TASK_ID-1]}..." 
EOT 

Ensuite, vous créez ou exécutez ce script directement pour soumettre votre tableau de travail (./submit.sh plutôt que qsub submit.sh car la commande qsub fait partie du script.

+0

Ceci est valide, mais je voudrais vraiment que la solution soit dans le script sge lui-même, pas enveloppé par un script shell, ou en mettant les arguments dans la ligne de commande. –

+0

@Sahil, ce n'est probablement pas possible. Le script SGE s'exécutera une fois par tâche, de 1 au nombre total de tâches calculé. Ainsi, la détermination du nombre total de tâches doit avoir lieu avant l'exécution du script SGE. C'est ce que Damien éludait. – Vince

+0

@Vince, je suis cela, mais -t de toute façon, prend un argument numérique statique dans le script SGE. Tout ce que je dis est de remplacer la limite supérieure avec une variable, il ne va pas changer avec chaque tâche du travail de tableau. S'il n'y a pas de disposition pour cela, je vais probablement écrire le numéro à la main à chaque fois pour éviter d'encapsuler qsub par sh, qui a son propre ensemble de problèmes. –

Questions connexes