You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中用jq解析i3可见工作区并保存恢复?

解决i3窗口管理器恢复可见工作区的问题

问题原因分析

你之前的jq命令输出带引号的JSON数组,是因为表达式map(select(.visible == true)).name返回的是JSON数组对象,-r参数只对单个字符串值生效,无法去掉数组整体的引号和方括号。

正确步骤

1. 正确获取无引号的可见工作区名称

用以下命令逐个输出每个可见工作区的名称(每行一个,无引号):

i3-msg -t get_workspaces | jq -r '.[] | select(.visible == true) | .name'

解释:

  • .[]:遍历JSON数组中的每个工作区对象
  • select(.visible == true):筛选出可见的工作区
  • .name:提取工作区名称
  • -r:这里针对单个字符串值生效,输出纯文本不带引号

2. 将结果存入Bash数组

用循环读取输出存入数组,避免工作区名称含空格时出错:

local currentWorkspaces=()
while IFS= read -r ws; do
    currentWorkspaces+=("$ws")
done < <(i3-msg -t get_workspaces | jq -r '.[] | select(.visible == true) | .name')

3. 恢复可见工作区

i3的workspace命令每次只能切换一个工作区,多显示器场景下逐个设置即可:

for ws in "${currentWorkspaces[@]}"; do
    i3-msg workspace "$ws"
done

也可以把所有命令合并成一个传给i3-msg,减少进程调用:

i3-msg "$(printf 'workspace "%s"; ' "${currentWorkspaces[@]}")"

内容的提问来源于stack exchange,提问作者Jameson Bradfield

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 14:17:38