2

非常に単純なzshスクリプトを使用すると、次のようになります。

#!/bin/zsh

nums=(1 2 3)
num=$nums[$SGE_TASK_ID]

$SGE_TASK_IDsun-grid エンジンのタスク ID です。qsub を使用して一連のジョブを送信しています。

qsub マンページ ( http://www.clusterresources.com/torquedocs/commands/qsub.shtml#t ) でアドバイスされていることに従い、配列ジョブを次のように送信しています。

#script name: job_script.sh
qsub job_script.sh -t 1-3

$SGE_TASK_ID は、この配列ジョブに設定されていません...誰にも理由がありますか?

ありがとう!

4

4 に答える 4

1

配列内の位置にアクセスするには、次のようにする必要があります${the_array[$the_position]}

だからあなたの場合、

num=${nums[$SGE_TASK_ID]}

テスト:

$ nums=(1 2 3)
$ SGE_TASK_ID=1
$ echo ${nums[$SGE_TASK_ID]}
2

最初の位置は 0 番目であることに注意してください。

于 2013-05-10T14:01:50.760 に答える
1

配列変数を中かっこで囲む必要があります。

SGE_TASK_ID=2
nums=(1 2 3)
num=${nums[$SGE_TASK_ID]}
echo "num: $num"
# prints "num: 3"

Linux Documentation Project には、最高のシェル スクリプト ドキュメントがあります。

于 2013-05-10T14:01:59.413 に答える
1

答えてくれてありがとう。私はうまくいく解決策を見つけました:

クラスタの設定方法によっては、Sun Grid Engine が配列 ID に別の変数名を使用するように構成されている場合があります。これは私の場合でした。次のようにして、使用する変数を見つけました。

// job_script.sh

#!/bin/zsh
env >> ~/job_env
set >> ~/job_env

これにより、スクリプトによって設定されたすべての環境変数が job_env というファイルにダンプされます。ファイルを調べて、ジョブごとにインクリメントされる可変配列 ID を探すだけです。見つけるのはそれほど難しくないはずです。

次のように、qsub を使用して job_script.sh を送信することを忘れないでください。

qsub -t 1-3 job_script.sh

私の場合、設定された ID は $PBS_ARRAYID でした。これがデフォルトだとは思わないので、 $SGE_TASK_ID はクラスターの標準 SGE セットアップで機能するはずです。

乾杯!

于 2013-05-14T21:45:52.943 に答える