9

bashスクリプト内のコメント内の変数を展開することは可能ですか?

SGEにフィードするスクリプトを書きたい。このqsub構文では、bashスクリプト内で.で始まる行を使用して、追加のパラメーターをグリッドエンジンに渡すことができます#$。例えば、

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

私が欲しいのは、-oパラメータが動的に変数に設定されることです$1。だから私は素朴に書くだろう

#$ -o run_${1}.out

ただし、行は。で始まるため#、bashはそれを無視し、変数$1は展開されません。

何か案は?いくつかのbashプリプロセッサ?他の方法は?

編集私はちょうど例として選び$1ました。$FOOまたはである可能性もあります$BAR

4

3 に答える 3

5

変数の拡張はシェルメモリで行われ、ファイルには影響しません。したがって、bashがどのように拡張されるかは問題ではありません。

代わりに、すべてを適切に展開して、オンザフライで実行するスクリプトを生成できます。

cat << EOF | qsub [options] -
#$ -o run_$1.out
cmds
EOF
于 2013-02-05T19:13:28.073 に答える
0

受け入れられた回答よりもSGE固有にするために、の標準出力をリダイレクトしてqsub、ジョブIDを解析するだけです。次に、これを使用して、を介してジョブ名を変更できますqalter

これは、このようなジョブを送信および変更するために使用したスクリプトのサンプルです。

 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

これを行うにはもっと慣用的な方法があると確信していますが、これは最初の試みです。

このアプローチではsubmission_script、独自の引数を持つことができます。また、名前だけでなく、他のジョブ特性をプログラムで変更することもできます。

于 2015-11-27T14:23:40.737 に答える
-2

qsubまた、SGEのコマンドを使用して、さまざまな出力ログまたはエラーログを生成しています。TASK_IDたとえば、スクリプトに含めるのではなく、を含めたい場合

#$ -o run_${TASK_ID}.out

parethesesなしでそれを書くことはトリックをするでしょう:

#$ -o run_$TASK_ID.out
于 2015-12-18T20:56:49.113 に答える