2012-01-08 13 views
6

Mam skrypt foo.sh który jest qsub zadanie z treścią:Argument przechodząc w skryptach SH

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

chciałbym przekazać dwa argumenty. Jeśli zadzwonię do qsub foo.sh, a b, pierwszy argument zostanie poprawnie przetworzony i wyświetlony w wierszu poleceń jako "a". Jednak nie wiem, jak przekazać argument w drugim przypadku zaczynającym się od "# $ -N". W tym przypadku 2 USD nie zostanie ocenione jako "b", ale faktycznie ustawione jest "2 USD". Pomoc będzie bardzo mile widziane.

+0

Myślę, że musisz wyjaśnić, co masz na myśli przez '# $ -N $ 2'. Jeśli twój skrypt jest skryptem powłoki bourne, to jest to komentarz (zaczyna się od '# '), ale wydaje się, że jest to coś innego. – Celada

+0

Już próbowałem to wyjaśnić, zobacz komentarz do Saptamus Prime. Ta opcja służy do ustawiania nazwy zadania w środowisku klastra, np. patrz: http://www.clusterresources.com/torquedocs/commands/qsub.shtml. Prawda, zwykle # służy do komentowania. Ale nie wtedy, gdy następuje po użyciu w składni # $ -Argument Value. Dzięki. – user1137731

+0

Jeśli pytanie dotyczy powłoki metasyntax właściwej dla qsub, powinieneś o tym wspomnieć w pytaniu. W każdym razie link, który wysłałeś, mówi o dyrektywie "# PBS", ale w ogóle nie wspomina o "# $", więc nadal nie wiem, co to znaczy. W każdym razie brzmi to tak, jakby te "qsub" dyrektywy były interpretowane przez 'qsub' sam ** przed ** skrypt jest uruchamiany, więc byłoby sensowne, że argumenty, które są przekazywane do skryptu po wykonaniu, nie wchodzą w przetwarzanie takich dyrektyw. Myślę, że powinieneś dostarczyć statyczny ciąg znaków dla nazwy pracy. – Celada

Odpowiedz

1

Nie, nie możesz. Numer # na początku linii sprawia, że ​​2 $ nie zostanie zastąpione argumentem skryptu. Sposób na zrobienie tego, co chcesz zrobić, to:

qsub foo.sh -N <name> 
2

Działa dla mnie fune.

nie wiem co -n środki dowodzenia, ale

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

gdy wywoływana przez sh foo.sh a b niezwłocznie echa

a 
b 
+0

Dziękuję za odpowiedź. Ale już wspomniałem, że argument przechodzący do polecenia echo działa dobrze. Jednak w drugim przypadku "# $ -N $ 2" 2 USD nie zostanie ocenione jako "b".Aby podać kontekst: jest to skrypt qsub dla silnika siatki słonecznej, a opcja -N określa nazwę zadania. Tak więc w tym przypadku zadanie zostanie ustawione jako "2 USD", a nie tak jak "b". Tak więc ogólne pytanie brzmi: jak przekazać parametry do "# $ -SomeParameterOption" 2 $? Dziękuję Ci. – user1137731

Powiązane problemy