#!/system/bin/sh local id_activity=$(dumpsys window | grep display | grep 'imeInputTarget' | awk '{print $4,$7}' | cut -d'}' -f1) local focus=$(dumpsys window | grep "mCurrentFocus" | tail -n 1 | awk '{print $NF}' | cut -d'}' -f1) local activity=$(echo "$id_activity" | grep "$focus") if["$activity" = "$id_activity | awk '{print $2}'"] am start -n $id_activity | awk '{print $3}' --display $id_activity | awk '{print $4}' fi 想用这种脚本
时间: 2024-04-27 10:24:36 浏览: 169
这段脚本的功能是获取当前输入法窗口的 ID 和名称,并将其切换到前台。但是,这段脚本并不完整,因为其中可能存在语法错误。具体来说,第 5 行的 `if` 后面应该有一个空格,即应该写成 `if [ "$activity" = "$id_activity | awk '{print $2}'" ]`。
此外,这段脚本还需要在 Android 系统中运行。如果您想在其他系统中运行,请修改脚本中的命令以适应您的系统。
总之,如果您需要使用这段脚本,请仔细检查其语法和适用环境,并进行必要的修改。
相关问题
#!/system/bin/sh local id_activity=$(dumpsys window | grep display | grep 'imeInputTarget' | awk '{print $4,$7}' | cut -d'}' -f1) local focus=$(dumpsys window | grep "mCurrentFocus" | tail -n 1 | awk '{print $NF}' | cut -d'}' -f1) local activity=$(echo "$id_activity" | grep "$focus") if["$activity" = "$id_activity | awk '{print $2}'"] am start -n $id_activity | awk '{print $3}' --display $id_activity | awk '{print $4}' fi 优化一下
这段代码看起来像是一个 Android 系统的 shell 脚本,主要作用是获取当前输入法和应用的焦点,并在需要时打开输入法。
首先,需要在 `if` 的前面加一个空格,否则会报错。然后,可以将 `grep` 和 `awk` 命令合并,避免使用管道符 `|`。另外,可以将 `awk` 命令中的 `'{print $2}'` 和 `'{print $3}'` 合并为一个,这样可以避免使用多个管道符,提高效率。最后,建议在 `am start` 命令中加上参数 `-W`,可以等待应用启动完成后再返回。
优化后的代码如下:
```
#!/system/bin/sh
local id_activity=$(dumpsys window | awk '/display/ && /imeInputTarget/ {print $4,$7}' | cut -d'}' -f1)
local focus=$(dumpsys window | awk '/mCurrentFocus/ {print $NF}' | cut -d'}' -f1)
local activity=$(echo "$id_activity" | awk -v focus="$focus" '$0 ~ focus {print $2}')
if [ "$activity" = "$(echo "$id_activity" | awk '{print $2,$3,$4}')" ]; then
am start -n $activity --display $(echo "$id_activity" | awk '{print $4}') -W
fi
```
#!/system/bin/sh # 获取当前活跃窗口 get_display_id() { local focus=$(dumpsys window | grep "mCurrentFocus" | tail -n 1 | awk '{print $NF}' | cut -d'}' -f1) local displays=$(dumpsys window | grep display | grep 'imeInputTarget') local activity=$(echo "$displays" | grep "$focus" | cut -d'#' -f2 | awk '{print $NF}' | cut -d'}' -f1) focus是否和activity一样可以返回一个布尔类型 } get_display_id_activity() { local displays=$(dumpsys window | grep display | grep 'imeInputTarget') dumpsys window | grep display | grep 'imeInputTarget' | awk '{print $4,$7}' | cut -d'}' -f1 local display_id=$(echo "$displays" | cut -d'#' -f2 | awk '{print $1}') local activity=$(echo "$displays" | cut -d'#' -f2 | awk '{print $NF}' | cut -d'}' -f1) echo $display_id $activity } get_display_id_activity # 判断窗口所在的显示器 display_id=$(get_display_id) case esac 优化一下
可以将 `get_display_id_activity()` 函数中的冗余代码去掉,同时在 `case` 语句中添加具体的操作。代码优化后如下所示:
```shell
#!/system/bin/sh
# 获取当前活跃窗口的显示器 ID 和活动
get_display_id_activity() {
local displays=$(dumpsys window | grep display | grep 'imeInputTarget')
local display_id=$(echo "$displays" | cut -d'#' -f2 | awk '{print $1}')
local activity=$(echo "$displays" | cut -d'#' -f2 | awk '{print $NF}' | cut -d'}' -f1)
echo "$display_id $activity"
}
# 获取当前活跃窗口所在的显示器 ID
get_display_id() {
local focus=$(dumpsys window | grep "mCurrentFocus" | tail -n 1 | awk '{print $NF}' | cut -d'}' -f1)
local displays=$(dumpsys window | grep display | grep 'imeInputTarget')
local activity=$(echo "$displays" | grep "$focus" | cut -d'#' -f2 | awk '{print $NF}' | cut -d'}' -f1)
echo "$activity"
}
# 获取当前活跃窗口所在的显示器 ID,然后根据不同的显示器 ID 执行不同的操作
display_id=$(get_display_id)
case "$display_id" in
"display_id_1")
# 执行显示器1的操作
;;
"display_id_2")
# 执行显示器2的操作
;;
*)
# 默认操作
;;
esac
```
这样代码更加简洁,可读性也更好了。
阅读全文