parámetro para secuencias de comandos shell que se inicia con qsub
-
29-09-2019 - |
Pregunta
¿cómo puedo parametrizar un script de shell que se ejecuta en una cuadrícula (iniciado con qsub)? Tengo un script de shell, donde uso getopts para leer los parámetros.
Cuando comienzo (qsub script.sh -r -s firstparam secondparam ..) este script de trabajo con qsub recibo mensajes de error,
qsub: opción no válida - s
qsub: valor -r ilegal
qsub como piensa el parámetro son por sí misma. Sin embargo, no he encontrado ninguna solución.
Gracias
Solución 3
acabo descubierto la manera de resolverlo: acaba de imprimir las órdenes del scrip cáscara con el eco y el resultado tubería a qsub:
echo "./script.sh var1=13 var2=24" | qsub
Otros consejos
El uso de la opción de la qsub -v es la forma correcta:
qsub -v par_name=par_value[,par_name=par_value...] script.sh
par_name se puede usar como variable en la secuencia de comandos shell.
Además de la respuesta de Volk, con el fin de hacer referencia a las variables de la lista (designado por -v) sólo tiene que utilizar el nombre que usted define en su llamada. Por lo tanto, digamos que usted ha hecho una llamada a qsub de la siguiente manera
qsub -v foo='qux' myRunScript.sh
A continuación, myRunScript.sh
podría ser algo como esto:
#!/bin/bash
#PBS -l nodes=1:ppn=16,walltime=0:00:59
#PBS -l mem=62000mb
#PBS -m abe
bar=${foo}
echo "${bar}"
Cuando la salida sería
qux
Espero que esto ayude!
Hay una mejor manera ...
Estoy muy sorprendido por cuánto tiempo esta cuestión ha ido sin una buena respuesta. Puede ser que la versión específica de qsub
no se especificó. qsub
existe en al menos par motor y también de Sun Grid Engine, tal vez otros programadores. Por lo tanto, es importante saber lo que usted está utilizando. Voy a hablar de unos pocos aquí:
PAR: qsub -F <arguments> command
página del manual
Aquí está un ejemplo de cómo normalmente lo uso. A partir de este script de ejemplo que se acaba se hace eco de los argumentos que se le pasan:
$ cat testArgs.pbs
#!/usr/bin/env bash
echo $@
Me presentaría el trabajo como este:
$ qsub -F "--here are the --args" testArgs.pbs
3883919.pnap-mgt1.cm.cluster
Y esto es lo que el archivo de salida parece después de que se ejecuta:
$ cat testArgs.pbs.o3883919
--here are the --args
Sun Grid Engine: qsub command [ command_args ]
Usted sólo tiene que añadir los argumentos después del comando, al igual que lo haría cuando se ejecuta en la cáscara. No tengo SGE correr en cualquier lugar, por lo que ningún ejemplo para éste. Pero es lo mismo con Slurm, que está por debajo
Slurm: sbatch command [ command_args ]
Aquí presento la misma escritura que utilicé con el ejemplo anterior de par:
$ sbatch testArgs.sh what the heck
Submitted batch job 104331
Y los resultados:
$ cat slurm-104331.out
what the heck
Exportación de variables de entorno! = Pasar argumentos
La exportación de variables de entorno es muy diferente de pasar argumentos a un comando.
Aquí es una buena discusión sobre las diferencias.
Las respuestas qsub
sobre todo recomiendan -v
. Para ser claros, las variables de entorno exportaciones -v
, -F
pasa argumentos para el comando.
Yo por lo general prefieren para parametrizar mis guiones permitiendo argumentos. De hecho, yo diría que es mucho más común el uso de secuencias de comandos como ésta process_data.sh --threads 8
que hacer algo como export THREADS=8; process_data.sh
.