パラメータをスクリプトに渡し、スクリプトをbsubへの入力にリダイレクトします。

パラメータをスクリプトに渡し、スクリプトをbsubへの入力にリダイレクトします。

現在、Platform LSFのbsubジョブ提出システムを使用しています。ジョブスクリプトを送信する必要がありますが、ジョブスクリプトにパラメータを渡すのに問題があります。

私に必要なものは次のとおりです。ジョブスクリプトは、1つのコマンドライン引数を持つbashスクリプトです。スクリプトに引数を渡し、bsubへの入力として使用するスクリプトをリダイレクトする必要があります。問題は、そのパラメータがスクリプトに適用されないことです。

私は試した:bsub < script.bsub 1

script.bsubは私のスクリプトで、1は数値パラメータです。このアプローチは機能しません。 1 は bsub の引数として扱われます。

別のアプローチ:bsub < "script.bsub 1" このアプローチでは、bsubは二重引用符で囲まれた行全体をファイル名として扱います。

まず、コマンドライン引数をスクリプトに適用してから、引数を使用してそのスクリプトを入力として別のプログラムにリダイレクトする方法はありますか? bsubの経験がある人なら、もっといいと思います。

アップデートと解決策:

bsubファイルにコマンドラインパラメータを適用するのは非常に複雑なプロセスのようです。以下に説明するHEREDOCメソッドを試しましたが、bsubはスクリプトファイル名がコマンドであるかのように動作します。したがって、この問題を解決する最も簡単な方法は、入力リダイレクトをまったく使用しないことです。

bsubで実行されるスクリプトに引数を渡すには、まずスクリプトファイルではなくコマンドラインですべてのbsub引数を指定します。次に、次のようにスクリプトファイルを実行します。

"sh script.sh [arg]"

すべてのbsubパラメータの後。したがって、行全体は次のようになります。

bsub -q [queue] -J "[name]" -W 00:10 [other bsub args] "sh script.sh [script args]"

これは私の元の質問に対する答えではありませんが、少なくともbsubの場合、私の問題に対する最も簡単な解決策です。

答え1

ここには文書が必要で、ここには文字列が必要です。

bsub <<HEREDOC
    $(script.bsub 1)
HEREDOC

これがドキュメントの外観です。シェルは、何が起こった行が<<HEREDOC見つかるまで、発生した行間のすべての拡張を読み込み、HEREDOCファイル記述子0 - stdinの呼び出しコマンドに出力を渡します。

ここの文字列は原則として同じです。

bsub <<< script.bsub 1

使い方が簡単に見えるかもしれませんが、もっと混乱しています。いいえポータブルシェルスクリプト。 hereドキュメントはPOSIXシェル標準の一部として定義されていますが、here文字列はbashで動作してもシェル固有の実装です。

スクリプトが中断のない環境で実行されないことを100%確信できず、インタラクティブな使用にのみこの文字列を使用しない限り、すべてのスクリプト状況でこの文書を使用するのが最善です。

もちろん、これらのいずれかが機能する場合は、おそらく次のようになります。

script.bsub 1 | bsub

同じことをします。これは|pipe script.bsubの標準出力を のbsub標準入力に変換しますが、bsubサブシェルでも実行される可能性が高いです。何らかの方法で現在のシェル環境を変更する場合bsub(たとえば、シェル変数の値の変更)、これが|pipe最善の解決策ではない可能性があります。

答え2

bsubファイルにコマンドラインパラメータを適用するのは非常に複雑なプロセスのようです。 mikeservが修飾したHEREDOCメソッドを試しましたが、bsubはスクリプトファイル名がコマンドであるかのように動作します。したがって、この問題を解決する最も簡単な方法は、入力リダイレクトをまったく使用しないことです。

私の質問は特にプラットフォームLSFのbsubに関連しているので、これはおそらくこの種の買収問題を解決するための最良の方法です。 bsubで実行されるスクリプトに引数を渡すには、まずスクリプトファイルではなくコマンドラインから実行します。 。次に、次のようにスクリプトファイルを実行します。

"sh script.sh [arg]"

すべてのbsubパラメータの後。したがって、行全体は次のようになります。

bsub -q [queue] -J "[name]" -W 00:10 [other bsub args] "sh script.sh [script args]"

この場合は、スクリプトとして.bsubファイルを使用せずに通常の.shスクリプトを使用し、Unix shコマンドを使用して引数として実行することをお勧めします。

関連情報