テキスト行をファイルに出力し、さらにデータを同じファイルに出力する 2 番目のスクリプトを呼び出す bash スクリプトがあります。それらをscript1.shおよびscript2.shと呼びましょう。2 つのスクリプトに分割されている理由は、script2.sh のバージョンが異なるためです。
script1.sh:
rm -f output.txt
echo "some text here" > output.txt
source script2.sh
script2.sh:
./read_time >> output.txt
./run_program
./read_time >> output.txt
script2.sh の 3 行のバリエーションが繰り返されます。
これはほとんどの場合うまくいくようですが、ときどきファイル output.txt に「some text here」という行が含まれていません。最初は、次のように script2.sh を呼び出していたためだと思いました./script2.sh
。しかしsource
、問題を使用してもまだ発生します。問題は再現性がないため、何かを変更しようとしても、実際に修正されているかどうかはわかりません。
何が原因でしょうか?
編集: スクリプトは非常に単純です。script1 はここに表示されているものとまったく同じですが、ファイル名が異なります。スクリプト 2 は私が投稿したものですが、同じ 3 行が繰り返され、./run_program
異なる引数を持つことができます。出力ファイルに対してgrepを実行しました>
が、予期しない場所には表示されません。
これらのスクリプトの使用方法は、script1 がプログラムによって作成されることです (バージョン間の唯一の違いはsource script2.sh
行です。この script1.sh は、ssh を使用して別のコンピューター (実際には FPGA 上の Linux) で実行されます。それが行われる前に)。 、出力ファイルもsshを使用して削除されます. 理由はわかりませんが、これをすべて書いたわけではありません. また、ホストで実行されているコードを確認しました. 出力ファイルの唯一の言及は、 ssh を使用して削除され、script1 の実行後にホストにコピーされます。
編集 2: script2.sh からファイルに出力される 1 行以外のすべてを削除することで、ようやく妥当な速度で問題を再現できるようになりました。これにより、テストを少し速く行うこともできました。これを取得すると、10回の実行ごとに1〜4回問題が発生しました。スクリプトを実行する前に ssh 経由でファイルを削除していたコマンドを削除すると、問題が解決したようです。念のためにもう少しテストしますが、解決したと思います。なぜそれが問題になるのかはまだわかりませんが。すべての削除コマンドが実行される前に、ssh コマンドが終了しないと思いました。