
私はこれをAndroid上で実行しています。
注文する:
dumpsys activity activities | grep mFocusedApp
出力:
mFocusedApp=ActivityRecord{273535b u0 com.any.some/.app.AnyActivity t5595}
予想される:
com.any.some
sedまたは他の直接コマンドを介してパッケージ名が必要です。
編集する(コメントからコピーしました。回答;結果文字列がコマンドに引数として渡されるべきであることを明確にするために追加されました。 )
現在焦点を当てたアプリケーションを再起動する必要があるため、パッケージ名を取得したら、次のように渡して停止する必要がam stop
ありますam start
。
am stop com.any.some && am start com.any.some
答え1
GNUの使用grep
:
focusApp=$(
dumpsys activity activities |
grep -Po '^mFocusedApp=\S+\{\S+ \S+ \K[^\s/]+'
)
基準:
focusApp=$(
dumpsys activity activities |
sed -n 's/^mFocusedApp=[^ ]\{1,\}{[^ ]\{1,\} [^ ]\{1,\} \([^\s/]+\).*/\1/p'
)
答え2
おそらく
dumpsys activity activities | grep '^mFocusedApp=' | sed 's#.* \([^ ]*\)/.*#\1#'
正規表現は、間にスペース以外のすべての文字と一致します
/
。
試験用
echo 'mFocusedApp=ActivityRecord{273535b u0 com.any.some/.app.AnyActivity t5595}' |sed 's#.* \([^ ]*\)/.*#\1#'
出力:
com.any.some
(すべての関連入力に対してこれが機能することを確認するには、より多くの例が必要です。)
コメントに返信:
他のコマンドでパッケージ名を使用するには、出力を変数に保存できます。
package=$(dumpsys activity activities | grep '^mFocusedApp=' | sed 's#.* \([^ ]*\)/.*#\1#')
am stop "$package" && am start "$package"
答え3
これがなぜ出力でなければならないのかは言っていませんが、次はあなたが望むものを推測することです。
dumpsys activity activities| awk -F'[ /]' '/^mFocusedApp=/{print $3}'
com.any.some
答え4
stdin=$(
dumpsys activity activities |
grep mFocusedApp |
cut -d "{" -f2 |
cut -d " " -f3 |
cut -d "/" -f1
)
am force-stop "$stdin" && am start "$stdin"
ヒュー、みんなありがとう。