2013-02-05 20 views
7

È possibile espandere le variabili nei commenti all'interno di uno script bash?Espansione variabile nei commenti

Voglio scrivere uno script da inserire in SGE. La sintassi qsub mi consente di passare parametri aggiuntivi al motore della griglia utilizzando le righe all'interno dello script bash che iniziano con #$. Ad esempio,

#$ -q all.q 
#$ -S /bin/bash 
#$ -V 
#$ -m beas 
#$ -o run_20120103.out 

quello che voglio è che il parametro -o è dinamicamente impostata su una variabile, dire $1. Quindi mi sento di scrivere ingenuamente

#$ -o run_${1}.out 

Tuttavia, dal momento che la linea inizia con un #, bash ignora e la variabile $1 non viene espansa.

Qualche idea? Qualche preprocessore bash? Un altro modo?

EDIT Ho appena scelto $1 come esempio. Potrebbe anche essere $FOO o $BAR.

+0

Qual è determinare il valore di $ {1 }? Stai facendo un ciclo for per caricare diversi lavori sul cluster/griglia? –

+0

sì, è tutto. –

+2

In tal caso puoi semplicemente chiamare qsub con l'opzione -o all'interno del tuo loop invece di mettere # $ -o all'interno dello script inserito in qsub. –

risposta

4

L'espansione variabile si verifica nella memoria della shell, non influisce sul file. Pertanto, non importa quale bash si espande.

Invece, probabilmente si può generare lo script da eseguire al volo, con tutto ampliato a posto:

cat << EOF | qsub [options] - 
#$ -o run_$1.out 
cmds 
EOF 
+0

Puoi spiegare esattamente cosa fa questo script passo dopo passo? Ho provato a testarlo ma non ho idea di quale dovrebbe essere il comportamento e non sto ottenendo il comportamento che mi aspetto sia abbastanza inutile – Gullydwarf

+0

@Gullydwarf Questo script non è un esempio completo o autonomo.Semplicemente illustra una struttura sintattica per espandere le variabili nel testo prima di inviarlo a qsub. –

+0

Potresti espanderlo? Penso che questo potrebbe essere quello che sto cercando di espandere un walltime variabile per i miei lavori. Non c'è nessuna opzione come -o per walltime in qsub c'è? Ciò lo renderebbe molto più semplice: p Modifica: Penso di averlo trovato, -l può anche essere usato come opzione per qsub, dove penso di poter passare il walltime. Test ora – Gullydwarf

0

Per essere un po 'più SGE specifico rispetto la risposta accettata, solo reindirizzare l'output standard qsub e analizza l'ID del lavoro. È quindi possibile utilizzare questo per modificare il nome del lavoro tramite qalter.

Ecco un esempio di uno script che ho utilizzato per inviare e modificare lavori come questo.

for a in $args; 
do 
    qsub submission_script $a 1> job.txt 
    jid=$(cat job.txt | tr -dc '0-9' | cut -c -6) 
    qalter $jid -N $a 
done 

Sono certo che ci sono altri modi idiomatici per farlo, ma questo è un primo tentativo.

Questo approccio consente a submission_script di avere i propri argomenti. Consente inoltre di modificare a livello di codice altre caratteristiche del lavoro, non solo il nome.

-2

Sto anche utilizzando il comando qsub in SGE per generare diversi registri di output o di errore. Per esempio, se mi piacerebbe includere il TASK_ID nello script, invece di fare

#$ -o run_${TASK_ID}.out 

scriverlo senza i paretheses farà il trucco:

#$ -o run_$TASK_ID.out 
+0

No, non fa il trucco. Ottieni un file chiamato run_ $ TASK_ID.out, la variabile non è stata sostituita dal suo valore – matthieu

Problemi correlati