2013-02-05 13 views
7

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プリプロセッサ?他の方法ですか?

EDIT例として$1を選択しました。それだけでなく、$FOOまたは$BARでもかまいません。

+0

:たとえば、私は、スクリプト内のTASK_ID、代わりの

#$ -o run_${TASK_ID}.out 

を行うことがparethesesせずにそれを書く含めたい場合はトリックを行います}? クラスタ/グリッド上で異なるジョブをロードするサイクルを行っていますか? –

+0

はい、それです。 –

+2

その場合、qsubに与えられたスクリプトの中に#$ -oを入れるのではなく、あなたのループの中にオプション-oを付けてqsubを呼び出すことができます。 –

答えて

4

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

代わりに、あなたはおそらく場所に展開すべてを、その場で実行するスクリプトを生成することができますだけの標準出力をリダイレクトし、受け入れ答えよりも、特定のビットよりSGEであるために

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

このスクリプトが何を段階的に実行するかを正確に説明できますか?私はそれをテストしようとしましたが、私はその行動がどんなものでなければならないか分かりませんでした。私は期待した動作を得られません。それは全く役に立たないと思っています。 – Gullydwarf

+0

@ Gullydwarfこのスクリプトは完全ではありません。これは、テキストをqsubに送る前にテキスト内の変数を展開するための構文構造を示しています。 –

+0

あなたはそれを拡大できますか? これは私の仕事のためにwalltimeを変えるために私が探しているかもしれないと思います。 qsubにはwalltimeに-oのようなオプションはありませんか?そうすれば、はるかに簡単になるでしょう:p 編集:私はそれを見つけたと思っています。私はqsubのオプションとして使うこともできます。テスト中 – Gullydwarf

0

qsubを入力し、ジョブIDを解析します。これを使用して、qalterでジョブ名を変更できます。

ここには、このようなジョブの送信と変更に使用したスクリプトのサンプルがあります。

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

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

-2

また、SGEでqsubコマンドを使用して、異なる出力ログまたはエラーログを生成しています。 $ {1の値を決定している何

#$ -o run_$TASK_ID.out 
+0

いいえ、それはやりません。 run_ $ TASK_ID.outというファイルがあり、その変数はその値に置き換えられません – matthieu

関連する問題