プログラムが期待どおりに実行されません。

プログラムが期待どおりに実行されません。

私は次のbashシェルスクリプトを持っていますが、時々そうではありません。問題は日時の場所です。示されているようにプログラムdatescreenlog.0。ほとんどの場合、これは正常に発生します。ただし、時には日付と時刻が追加されることがあります。スタートscreenlog.0。フォーマットはscreenlog.0特定の指示に従う必要があるため、これは本当に面倒な作業です。どんな助けでも大変感謝します。

#!/bin/bash
...
...

if grep -q "dicounter_${string1}_from_${string2}" MasterFile.txt || [ -e "dicounter_${string1}_from_${string2}" ];
then
   echo "dicounter_${string1}_from_${string2} already exists in the MasterFile or the current directory. Would you like to proceed?"
   read string3
   if [[ "${string3^}" == 'Y' ]]; then
      echo "How many times has this dicounter been retested? (e.g. 1 for first time, 2 for the second, ...)"
      read string4
      screen -S trans -L /dev/ttyACM0
      screen -S trans -X stuff 's'$(echo -ne '\015')
      sleep 8s
      screen -S trans -X quit
      date +%F~%H:%M:%S >> screenlog.0
      mv screenlog.0 dicounter_${string1}_from_${string2}~${string4}

   else
      exit 0
   fi
else
  #opening screen & begin analysis
  screen -S trans -L /dev/ttyACM0
  screen -S trans -X stuff 's'$(echo -ne '\015')
  sleep 8s
  screen -S trans -X quit
  date +%F~%H:%M:%S >> screenlog.0
  mv screenlog.0 dicounter_${string1}_from_${string2}

fi

本質的に、プログラムは、dicounter_..._from_...それがすでに存在するか、そうでないか、またはユーザが別のテスト実行を望むかどうかを確認し、送信機に接続してデータを取得することです。最後に、screenlog.0ファイルが作成され、ファイルの最後に日付と時刻を追加したいと思います。その後、名前を変更します。

ベストアンサー1

ログをフラッシュする前に、画面「exit」コマンドが返されるようです。最終画面コマンドと日付スタンプの間に遅延を追加すると、画面時間がログの書き込みを完了できるようになります。別のオプションは、「使用中」ループを使用してログが記録されるのを待つことです。

...
screen -S trans -X quit
while [ ! -s screenlog.0 ]
do
  sleep 1
done
date +%F~%H:%M:%S >> screenlog.0
...

おすすめ記事