2017-09-13 5 views
1

J'ai un script bash qui appelle qsub avec plusieurs variables:Envoyer tableau à pbs scénario

group=group_1 
normals=$(IFS=,; echo *.txt) 

qsub -v VAR1=$group,VAR2=${normals[@]} [...] run_script.pbs 

run_script.pbs

#PBS -l nodes=1:ppn=16 
#PBS -l walltime=2:00:00 
#PBS -l mem=10GB 

group=$VAR1 
normals=$VAR2 

echo ${normals[@]} 

Dans ce cas, le tableau contient normals plusieurs noms de fichiers, mais lorsque j'essaie d'accéder à ceux-ci dans le script .pbs, seul le premier est imprimé.

Quelle est la manière correcte de passer et accéder à un tableau dans un script .pbs?

+0

@Inian - exactement – fugu

+0

La réponse a été utile? Si cela a résolu votre problème, n'oubliez pas de marquer la réponse acceptée – Inian

Répondre

3

Vous êtes et non de stocker la liste de fichiers dans un tableau. Vous faites juste la syntaxe de substitution de commande $(..) et stockez la sortie dans le contexte d'une variable et essayez d'y accéder en tant que tableau.

La bonne façon d'obtenir la liste des fichiers (ne pas besoin $(..)) et le stocker dans un tableau serait,

shopt -s nullglob 
fileList=(*.txt) 

oldIFS="$IFS" 
IFS=, 
printf -v var_list "%s" "${fileList[*]}" 
IFS="$oldIFS" 
shopt -u nullglob 

L'option nullglob est nécessaire pour gérer le cas où la *.txt n » ai pas t retourner tous les fichiers sur le dossier en cours. Ne pas inclure va cracher quelques erreurs sur la console. Nous l'avons désactivé avec -u lorsque nous n'avons plus besoin de l'option définie.

Avec l'option -v que printf supports, vous pouvez stocker la sortie de tableau avec des virgules format séparé directement dans la variable var_list

Maintenant, vous pouvez passer le $var_list contenant la liste des fichiers en format séparés par des virgules correspondant à la commande vouloir.

qsub -v VAR1=$group,VAR2="${var_list}"