![別のスクリプトからbashスクリプトを実行し、その出力をリダイレクトする](https://rvso.com/image/1047584/%E5%88%A5%E3%81%AE%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%8B%E3%82%89bash%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%80%81%E3%81%9D%E3%81%AE%E5%87%BA%E5%8A%9B%E3%82%92%E3%83%AA%E3%83%80%E3%82%A4%E3%83%AC%E3%82%AF%E3%83%88%E3%81%99%E3%82%8B.png)
みなさんこんにちは。プログラムを実行する必要があります。簡潔に説明します。すでに実行したことと、実行する必要があることについて説明します。
簡単に言うと、Bash で「シミュレーター」を作成し、生徒の演習を実行して正解かどうかを確認する必要があります。演習ごとにスコアを計算し、生徒が試験に合格したかどうかを判断します。
ほとんどすべてやりました... 書くべきコードが数行足りないだけだと思います... でも、それも最も重要なことだと思います... :(
私のスクリプトは TEST.SH で、生徒の演習を実行する必要があります。演習はスクリプト ELABORATO.SH です。これで、いくつかのシナリオが作成できます。
- ELABORATO.SH は、いくつかの値をパラメータとして入力するのを待機します。
- ELABORATO.SH は標準入力、キーボードからの入力を待機します。
- ELABORATO.SH は出力をファイル/fifo/その他に書き込みます。;
まず、解決するのは本当に簡単です...実際、私の TEST.SH からは
ELABORATO.SH
次のように呼び出します:. ELABORATO.SH param1 param2 param3;
2番目と3番目は私にとってはもっと複雑です。
ファイルから文字列を読み取り (問題ありません)、この文字列を
ELABORATO.SH
stdin からの文字列として渡す必要があります。...の出力を含むファイルを作成する必要があります
ELABORATO.SH
。たとえば、ELABORATO.SH
ファイル (出力ファイルの名前がわかりません) を生成する場合、別のディレクトリにもファイルを生成する必要があります... どうすればいいですか?
答え1
宿題* のようにも聞こえますが、やってみます。
なぜスクリプトをソースするのでしょうか
ELABORATO.SH
? スクリプトをソースして、exit
ステートメントやエラーが発生した場合、TEST.SH
同じ結果になります。 それが必要なことではないと思います。 スクリプトを実行するだけです:bash ELABORATO.SH param1 param2
入力をリダイレクトすることを考えましたか?
bash ELABORATO.SH param1 param2 < INPUT_FILE
の出力をキャプチャするには
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 のフレンドリーな人々を上司に推薦してください。