You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

i3wm配置问题:如何仅在工作日自动启动指定应用

解决i3wm中仅工作日启动指定应用的问题

嗨,我懂你现在卡在哪了——明明终端里能正常运行的条件命令,放到i3的exec配置里就失效,对吧?这其实是因为i3处理exec命令的逻辑和你直接在shell里执行不一样。

问题出在哪?

你原来写的配置:

exec --no-startup-id 'test $(date +%u) -lt 6 && slack'

i3默认不会把exec的参数交给shell解析,它会把整个单引号里的内容当作一个完整的程序名去查找——显然系统里不存在叫test $(date +%u) -lt 6 && slack的程序,所以自然不会生效。

而你快捷键里的写法能工作,其实是因为i3处理快捷键的exec时,会把双引号内容交给shell,但这里还有个隐藏坑:如果用双引号,$(date +%u)会在i3加载配置文件的那一刻就被展开成当时的星期数,而不是每次按快捷键时实时计算。要是你周末加载了配置,就算周一按快捷键也不会触发slack,这显然不是你想要的效果。

正确的配置写法

要让i3正确解析条件命令,你需要显式调用shell来执行整个逻辑,比如用bash -c把命令包裹起来:

启动时自动执行(工作日启动slack)

exec --no-startup-id bash -c 'test $(date +%u) -lt 6 && slack'

快捷键触发(实时判断工作日)

如果要让快捷键也能实时判断工作日状态,应该改成:

bindsym $mod+i exec bash -c 'test $(date +%u) -lt 6 && slack'

为什么这样能行?

  • bash -c告诉i3:“把后面的字符串交给bash shell去解析执行”,这样shell会处理$(date +%u)的变量展开,以及&&的条件判断逻辑。
  • date +%u返回1(周一)到7(周日),test $(date +%u) -lt 6会在周一到周五返回真,此时才会执行slack启动程序。

验证方法

你可以先在终端里直接运行这个命令,确认效果:

bash -c 'test $(date +%u) -lt 6 && slack'

工作日会正常启动slack,周末则不会有任何动作。确认没问题后,把配置加到i3的~/.config/i3/config里,按$mod+Shift+r重启i3就生效了。

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

火山引擎 最新活动