何らかの理由でタッチコマンドがbashで機能しない

何らかの理由でタッチコマンドがbashで機能しない

このような単純なものは間違いなく動作します。

#!/bin/bash
touch /sdcard/successful.txt

しかし、実際のbashコマンドでは機能しません。

#!/bin/bash
PACKAGE='com.mixplorer'
if [ $(pidof $PACKAGE) ]; then
  am force-stop com.mixplorer && am start -n com.mixplorer/.activities.BrowseActivity
fi

if [ ! $(pidof $PACKAGE) ]; then
  am start -n com.mixplorer/.activities.BrowseActivity
fi

loopcleaner()
{
  rm -rf /sdcard/log.txt
}

while [ $(pidof $PACKAGE) ]
do
  loopcleaner
  sleep 2

  if [ ! $(pidof $PACKAGE) ]; then
    touch /sdcard/successful.txt
    exit 0;
  fi
done

説明する:

  1. スクリプトが実行されたら、まずパッケージ名が "com.mixplorer"のファイルマネージャが有効になっていることを確認し、有効になっている場合は強制的に停止して再度開きます。そうでない場合は、オンにしてください。

  2. これでファイルマネージャが開かれたため、ファイルマネージャプロセスの実行中にLoopcleanerで定義された「log.txt」というファイルを10秒ごとにループから継続的に削除できます。

  3. 上記のクリーンアップアクティビティは、ファイルマネージャプロセスが実行されるまでのみ機能する必要があり、停止するとSuccess.txtというファイルが生成されます。これでスクリプトはすぐに終了します。

したがって、ファイルマネージャをシャットダウンした後、何らかの理由で内部ストアに正常なテキストが生成されません(タッチコマンドのみを実行すると正常に動作します)。

答え1

タッチコマンドの後に中断を追加して問題を解決しました。

while [ $(pidof $PACKAGE) ]
do
  loopcleaner
  sleep 2

  if [ ! $(pidof $PACKAGE) ]; then
    touch /sdcard/successful.txt
    break
    exit 0;
  fi
done

(私は初めてbashに触れましたが、これが最善のアプローチであるかどうかはわかりません。したがって、追加の編集/改善の提案があれば大いに感謝します。)

関連情報