別のスクリプトからbashスクリプトを実行し、その出力をリダイレクトする

別のスクリプトからbashスクリプトを実行し、その出力をリダイレクトする

みなさんこんにちは。プログラムを実行する必要があります。簡潔に説明します。すでに実行したことと、実行する必要があることについて説明します。

簡単に言うと、Bash で「シミュレーター」を作成し、生徒の演習を実行して正解かどうかを確認する必要があります。演習ごとにスコアを計算し、生徒が試験に合格したかどうかを判断します。

ほとんどすべてやりました... 書くべきコードが数行足りないだけだと思います... でも、それも最も重要なことだと思います... :(

私のスクリプトは TEST.SH で、生徒の演習を実行する必要があります。演習はスクリプト ELABORATO.SH です。これで、いくつかのシナリオが作成できます。

  1. ELABORATO.SH は、いくつかの値をパラメータとして入力するのを待機します。
  2. ELABORATO.SH は標準入力、キーボードからの入力を待機します。
  3. ELABORATO.SH は出力をファイル/fifo/その他に書き込みます。;

  1. まず、解決するのは本当に簡単です...実際、私の TEST.SH からはELABORATO.SH次のように呼び出します:

    . ELABORATO.SH param1 param2 param3;
    

    2番目と3番目は私にとってはもっと複雑です。

  2. ファイルから文字列を読み取り (問題ありません)、この文字列をELABORATO.SHstdin からの文字列として渡す必要があります。

  3. ...の出力を含むファイルを作成する必要がありますELABORATO.SH。たとえば、ELABORATO.SHファイル (出力ファイルの名前がわかりません) を生成する場合、別のディレクトリにもファイルを生成する必要があります... どうすればいいですか?

答え1

宿題* のようにも聞こえますが、やってみます。

  1. なぜスクリプトをソースするのでしょうかELABORATO.SH? スクリプトをソースして、exitステートメントやエラーが発生した場合、TEST.SH同じ結果になります。 それが必要なことではないと思います。 スクリプトを実行するだけです:

    bash ELABORATO.SH param1 param2
    
  2. 入力をリダイレクトすることを考えましたか?

    bash ELABORATO.SH param1 param2 < INPUT_FILE
    
  3. の出力をキャプチャするにはELABORATO.SH、リダイレクトは作ったそのために?

    bash ELABORATO.SH param1 param2 < INPUT_FILE > OUTPUT_FILE
    

どのファイルが書き込まれるかを調べるのはELABORATO.SH簡単ではありません。(余談ですが、出力ファイルがわからない場合、それらのファイルは のスコアの計算にどのように関係するのでしょうかELABORATO.SH? わざわざそれらを移動させる必要があるのでしょうか?)

とにかく、始めましょう。次のパイプラインは、によって作成されたファイルをリストしますELABORATO.SH

strace bash ELABORATO.SH params < INPUT_FILE 2>&1 > OUTPUT_FILE \
    | grep '^open(.*O_CREAT' | cut -d\" -f 2  

次に、それらを別の場所に移動するには、次のようにします。

for f in $(
    strace bash ELABORATO.SH params < INPUT_FILE 2>&1 > OUTPUT_FILE 
       | grep '^open(.*O_CREAT' | cut -d\" -f 2) 
do
    mv "$f" /path/to/elsewhere
done

*) AskUbuntu のフレンドリーな人々を上司に推薦してください。

関連情報