このような単純なものは間違いなく動作します。
#!/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
説明する:
スクリプトが実行されたら、まずパッケージ名が "com.mixplorer"のファイルマネージャが有効になっていることを確認し、有効になっている場合は強制的に停止して再度開きます。そうでない場合は、オンにしてください。
これでファイルマネージャが開かれたため、ファイルマネージャプロセスの実行中にLoopcleanerで定義された「log.txt」というファイルを10秒ごとにループから継続的に削除できます。
上記のクリーンアップアクティビティは、ファイルマネージャプロセスが実行されるまでのみ機能する必要があり、停止するとSuccess.txtというファイルが生成されます。これでスクリプトはすぐに終了します。
したがって、ファイルマネージャをシャットダウンした後、何らかの理由で内部ストアに正常なテキストが生成されません(タッチコマンドのみを実行すると正常に動作します)。
答え1
タッチコマンドの後に中断を追加して問題を解決しました。
while [ $(pidof $PACKAGE) ]
do
loopcleaner
sleep 2
if [ ! $(pidof $PACKAGE) ]; then
touch /sdcard/successful.txt
break
exit 0;
fi
done
(私は初めてbashに触れましたが、これが最善のアプローチであるかどうかはわかりません。したがって、追加の編集/改善の提案があれば大いに感謝します。)