1

私は研究グループで働いており、PBS 待ち行列システムを使用しています。私は PBS マスターではありませんが、ジョブが実行されているかどうかを検索するスクリプトを作成したいと考えていました。これを行うには、まず qstat 呼び出しの結果を qstat -f の引数として使用して、すべてのジョブの文字列を取得し、次にすべてのジョブの詳細なリストを取得して、送信されたファイル パスを検索します。現在のクラッジは次のように立っています

dump=`qstat -f `qstat``
if grep -q \
          "/${compounds[$i]}/D0_${j}_z_$((k*30))/scripts/jobscript_minim" \
      <<<$dump; then
      echo "Minimize is running!"
fi

改善のための提案?

また、$() は ``. しかし、私がしようとすると:

dump="$(qstat -f "$(qstat)")"

...私のプログラムは失敗します。どうしてこれなの?$() でシェル呼び出しをネストする方法を誤解していますか?? それとも、qstat から qstat -f にキュー ジョブのリストを渡す方法と関係がありますか? awk などを使用して qstat コマンドからジョブを取得し、何らかの方法で引数として qstat -f に渡す必要がありますか?

また、再帰的なgrepを使用する必要がありますか? 「正気」と言う人もいますが、それが何を意味するのかはわかりません。よりポータブルですか?速いですか?セラピストへの旅行が少なくて済みますか?

それを使うべき理由は何ですか?

4

4 に答える 4

1

了解しました...なんとかクリーンなソリューションを思い付くことができました...

search_dir="${compounds[${i}]}/D0_${j}_z_$[30*k]"
if [ ! -z "$(qstat -f $(qstat | grep -F jmick | awk '{print $1}')|\
      grep -F "$search_dir"|head -n 1)" ]
      then

...検索しているディレクトリは長いので、変数に割り当てます。内部コマンド置換を実行して自分のユーザー名のジョブのみを取得し、次に外部コマンド置換を実行してそれらのジョブの完全な詳細を出力し、ディレクトリの詳細をgrepして実行します。早期に発見された場合に備えて、コマンドを短絡させようとするヘッドを含めました。

ただし、再帰的なgrepのポイントは何であるかという問題は依然として存在します。

于 2010-08-25T19:26:06.393 に答える
1

再帰grepは、すべてのサブディレクトリで複数のファイルを検索します。再帰を使用しないと、現在の (または指定された) ディレクトリでのみファイルが検索されます。一方が他方よりも「正気」になる方法がわかりません。それぞれに特定のアプリケーションがあります。

ところで、質問はまとめて投稿するのではなく、特定の問題に分割する必要があります。共通点がある場合でも同様です。このサイトは、そのようにするとより効果的です。

于 2010-08-25T19:48:56.407 に答える
0

dump=`qstat -f `qstat``と同等です。dump=$(qstat -f )qstat$()と同等dump="$(qstat -f)qstat"です。

qstat -f "$(qstat)"qstat2つの引数を使用して呼び出します。オプションと、1つの単語としてまとめられた-fからの出力です。外部コマンドの出力に設定します。qstatdump="$(qstat -f "$(qstat)")"dumpqstat

qstat -f $(qstat)qstatからの出力に応じて、1から始まる任意の数の引数を使用して呼び出しますqstat。最初にの出力は、各空白シーケンスで別々の単語に分割され、次に、少なくとも1つに一致qstatするグロブパターンのように見える(つまり、、またはを含む*?各単語[fileは、一致するファイル名のリストに置き換えられます。これらの単語とファイル名はすべて、外部への個別の引数になりますqstat

于 2010-08-25T19:21:04.550 に答える
0

引用符なしで試してください:

dump=$(qstat -f $(qstat))
于 2010-08-25T16:20:16.487 に答える