我在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
你没有说为什么这应该是输出,但这里有 1 个猜测你可能想要什么:
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"
唷,谢谢大家