循环运行程序的剪切输出

循环运行程序的剪切输出

我想做的事

我想剪切程序的输出xkb-switch -W,它无限地等待布局组更改,并将组名称打印到标准输出。我只对输出的前两个字符感兴趣,所以我想用 来剪切它cut -c1-2

我正在努力实现的目标

我真正想要在这里完成的是使用 i3blocks 在 i3 栏中显示我当前的键盘布局,但我不希望行的长度发生变化,因为 xkb-switch 不仅输出布局语言(前两个字符),还有布局变体,我对此不感兴趣。目前,这就是我的块的样子:

[keymap]
label=
command=bash -c 'xkb-switch;xkb-switch -W'
interval=persist

我尝试过的

xkb-switch -W > foo & while inotifywait -qe modify foo; do cut -c1-2 foo; done

我尝试将这个 oneliner 组合在一起,其中 xkb-switch 的输出被重定向到一个文件,并通过使用 inotifywait 等待对文件的修改,调用 cut 来输出我想要获得的两个字符。

但这不起作用,因为该文件没有被 xkb-switch 按照我最初的预期方式破坏(我明白为什么这不起作用),而且 inotifywait 输出“修改“当文件被修改时,这是我不想要的。我想后者可以通过某种重定向来修改。但我怀疑我所尝试的并不是最好的方法。

答案1

要么我在这里遗漏了一些重要的东西,要么最简单的解决方案似乎有点太明显了:为什么不使用普通的管道?

xkb-switch -W | cut -c1-2

xkb-switch一旦输出换行符,这将打印每行输出的前两个字符。

相关内容