2012-01-08 12 views
6

Tengo un script de shell foo.sh que es un trabajo qsub con contenido:Argumento que pasa en los scripts .sh

#!/bin/bash -l 
    #$ -S /bin/bash 
    #$ -N $2 
    echo $1 

me gustaría pasar dos argumentos. Si llamo a qsub foo.sh a b, el primer argumento se procesa correctamente y se repite en la línea de comando como 'a'. Sin embargo, no sé cómo pasar un argumento en el segundo caso comenzando con '# $ -N'. En este caso, $ 2 no se evalúa como 'b', sino que se establece '$ 2'. La ayuda sería muy apreciada.

+0

Creo que debes explicar a qué te refieres con '# $ -N $ 2'. Si su guión es un guión de shell bourne, entonces este es un comentario (comienza con '#'), pero usted parece querer decirlo como algo más. – Celada

+0

Ya traté de explicarlo, ver comentarios a Saptamus Prime. Esta opción se utiliza para establecer el nombre del trabajo en un entorno de clúster, p. ver: http://www.clusterresources.com/torquedocs/commands/qsub.shtml. Es verdad, normalmente # se usa para comentarios. Pero no cuando se usa cuando se utiliza en la sintaxis # $ -Argument Value. Gracias. – user1137731

+0

Si la pregunta se refiere a la metasyntax del shell específica de qsub, deberías haber mencionado eso en la pregunta. De todos modos, el enlace que enviaste habla sobre una directiva '# PBS' pero no menciona' # $ 'en absoluto, así que todavía no sé lo que eso significa. En cualquier caso, parece que esas instrucciones 'qsub' son interpretadas por' qsub' en sí ** antes ** de que el script se ejecute, por lo que tendría sentido que los argumentos que se pasan al script una vez que se ejecutan no ingresen en el procesamiento de tales directivas. Creo que se supone que debes proporcionar una cadena estática para el nombre del trabajo. – Celada

Respuesta

1

No, no puede. El # al comienzo de la línea hace que los $ 2 no sean reemplazados por el argumento de la secuencia de comandos. La forma de hacer lo que intentas hacer es

qsub foo.sh -N <name> 
2

Funciona para mí.

No sé lo que los medios de mando -N, pero

#!/bin/bash -l 
#$ -S /bin/bash 
#$ -N $2 
echo $1 
echo $2 

cuando es llamado por sh foo.sh a b eco rápidamente

a 
b 
+0

Gracias por su respuesta. Pero ya mencioné que el argumento que pasa al comando echo funciona bien. Sin embargo, en el segundo caso '# $ -N $ 2' $ 2 no se evalúa como 'b'.Para dar un poco de contexto: este es el script qsub para el motor de cuadrícula solar y la opción '-N' establece el nombre del trabajo. Entonces, en este caso, el trabajo se establecería en '$ 2' y no en el deseado como 'b'. Entonces, la pregunta general es ¿cómo paso los parámetros a '# $ -SomeParameterOption' $ 2? Gracias. – user1137731

Cuestiones relacionadas