local display_id=$(echo "$displays" | grep "$focus" | awk 'print $1') 这个有问题优化一下
时间: 2024-03-02 11:48:12 浏览: 25
是的,这段代码的语法有问题,应该使用 `awk '{print $1}'` 而不是 `awk 'print $1'`。此外,可以将所有命令放在一行中,避免使用多个变量。
改进后的代码如下:
```
local display_id=$(dumpsys window | grep display | grep 'imeInputTarget' | grep "$(dumpsys window | grep "mCurrentFocus" | tail -n 1 | awk '{print $NF}' | cut -d'}' -f1)" | awk '{print $1}')
echo $display_id
```
这段代码的作用与之前的代码相同,都是获取当前焦点所在窗口所在的显示器 ID,但它使用了单个管道符将所有命令连接在一起,避免使用多个变量,并且修正了 `awk` 命令的语法错误。
相关问题
local focus=$(dumpsys window | grep "mCurrentFocus" | tail -n 1 | awk '{print $NF}' | cut -d'}' -f1) local displays=$(dumpsys window | grep display | grep 'imeInputTarget') local display_id=$(echo "$displays" | grep "$focus") echo $display_id
这段代码有一个问题,它没有提取出显示器的 ID,而是直接将 `$displays` 变量赋值给了 `$display_id` 变量,因此输出的是包含当前窗口信息的行。
要修复这个问题,需要在 `grep` 命令中添加 `awk '{print $1}'` 来提取出显示器的 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 display_id=$(echo "$displays" | grep "$focus" | awk '{print $1}')
echo $display_id
```
这段代码的作用与之前的代码相同,都是获取当前焦点所在窗口所在的显示器 ID,但它修复了没有提取出显示器 ID 的问题。
#!/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
```
这样代码更加简洁,可读性也更好了。